layui.define(['form', 'jquery'], function(exports) { //提示：模块也可以依赖其它模块，如：layui.define('layer', callback);
	var jQuery = layui.jquery,
		$ = jQuery,
		form = layui.form,
		_MOD = 'treeSelect',
		trss = {},
		TreeSelect = function() {
			this.v = '1.0.5';
		};



	/*
	 * JQuery zTree core v3.5.37
	 * http://treejs.cn/
	 *
	 * Copyright (c) 2010 Hunter.z
	 *
	 * Licensed same as jquery - MIT License
	 * http://www.opensource.org/licenses/mit-license.php
	 *
	 * email: hunter.z@263.net
	 * Date: 2018-08-21
	 */
	(function(r) {
		var J, K, L, M, N, O, v, t = {},
			w = {},
			x = {},
			P = {
				treeId: "",
				treeObj: null,
				view: {
					addDiyDom: null,
					autoCancelSelected: !0,
					dblClickExpand: !0,
					expandSpeed: "fast",
					fontCss: {},
					nameIsHTML: !1,
					selectedMulti: !0,
					showIcon: !0,
					showLine: !0,
					showTitle: !0,
					txtSelectedEnable: !1
				},
				data: {
					key: {
						isParent: "isParent",
						children: "children",
						name: "name",
						title: "",
						// url: "url",
						// icon: "icon"
					},
					simpleData: {
						enable: !1,
						idKey: "id",
						pIdKey: "pId",
						rootPId: null
					},
					keep: {
						parent: !1,
						leaf: !1
					}
				},
				async: {
					enable: !1,
					contentType: "application/x-www-form-urlencoded",
					type: "post",
					dataType: "text",
					headers: {},
					xhrFields: {},
					url: "",
					autoParam: [],
					otherParam: [],
					dataFilter: null
				},
				callback: {
					beforeAsync: null,
					beforeClick: null,
					beforeDblClick: null,
					beforeRightClick: null,
					beforeMouseDown: null,
					beforeMouseUp: null,
					beforeExpand: null,
					beforeCollapse: null,
					beforeRemove: null,
					onAsyncError: null,
					onAsyncSuccess: null,
					onNodeCreated: null,
					onClick: null,
					onDblClick: null,
					onRightClick: null,
					onMouseDown: null,
					onMouseUp: null,
					onExpand: null,
					onCollapse: null,
					onRemove: null
				}
			},
			y = [function(a) {
				var b = a.treeObj,
					c = g.event;
				b.bind(c.NODECREATED,
					function(b, c, i) {
						h.apply(a.callback.onNodeCreated, [b, c, i])
					});
				b.bind(c.CLICK, function(b, c, i, e, k) {
					h.apply(a.callback.onClick, [c, i, e, k])
				});
				b.bind(c.EXPAND, function(b, c, i) {
					h.apply(a.callback.onExpand, [b, c, i])
				});
				b.bind(c.COLLAPSE, function(b, c, i) {
					h.apply(a.callback.onCollapse, [b, c, i])
				});
				b.bind(c.ASYNC_SUCCESS, function(b, c, i, e) {
					h.apply(a.callback.onAsyncSuccess, [b, c, i, e])
				});
				b.bind(c.ASYNC_ERROR, function(b, c, i, e, k, g) {
					h.apply(a.callback.onAsyncError, [b, c, i, e, k, g])
				});
				b.bind(c.REMOVE, function(b, c, i) {
					h.apply(a.callback.onRemove,
						[b, c, i])
				});
				b.bind(c.SELECTED, function(b, c, i) {
					h.apply(a.callback.onSelected, [c, i])
				});
				b.bind(c.UNSELECTED, function(b, c, i) {
					h.apply(a.callback.onUnSelected, [c, i])
				})
			}],
			z = [function(a) {
				var b = g.event;
				a.treeObj.unbind(b.NODECREATED).unbind(b.CLICK).unbind(b.EXPAND).unbind(b.COLLAPSE).unbind(b.ASYNC_SUCCESS).unbind(
					b.ASYNC_ERROR).unbind(b.REMOVE).unbind(b.SELECTED).unbind(b.UNSELECTED)
			}],
			A = [function(a) {
				var b = e.getCache(a);
				b || (b = {}, e.setCache(a, b));
				b.nodes = [];
				b.doms = []
			}],
			B = [function(a, b, c, d, f, i) {
				if (c) {
					var m =
						e.getRoot(a),
						k = e.nodeChildren(a, c);
					c.level = b;
					c.tId = a.treeId + "_" + ++m.zId;
					c.parentTId = d ? d.tId : null;
					c.open = typeof c.open == "string" ? h.eqs(c.open, "true") : !!c.open;
					b = e.nodeIsParent(a, c);
					h.isArray(k) && !(b === !1 || typeof b == "string" && h.eqs(b, "false")) ? (e.nodeIsParent(a, c, !0), c.zAsync = !
						0) : (b = e.nodeIsParent(a, c, b), c.open = b && !a.async.enable ? c.open : !1, c.zAsync = !b);
					c.isFirstNode = f;
					c.isLastNode = i;
					c.getParentNode = function() {
						return e.getNodeCache(a, c.parentTId)
					};
					c.getPreNode = function() {
						return e.getPreNode(a, c)
					};
					c.getNextNode =
						function() {
							return e.getNextNode(a, c)
						};
					c.getIndex = function() {
						return e.getNodeIndex(a, c)
					};
					c.getPath = function() {
						return e.getNodePath(a, c)
					};
					c.isAjaxing = !1;
					e.fixPIdKeyValue(a, c)
				}
			}],
			u = [function(a) {
				var b = a.target,
					c = e.getSetting(a.data.treeId),
					d = "",
					f = null,
					i = "",
					m = "",
					k = null,
					j = null,
					o = null;
				if (h.eqs(a.type, "mousedown")) m = "mousedown";
				else if (h.eqs(a.type, "mouseup")) m = "mouseup";
				else if (h.eqs(a.type, "contextmenu")) m = "contextmenu";
				else if (h.eqs(a.type, "click"))
					if (h.eqs(b.tagName, "span") && b.getAttribute("treeNode" +
							g.id.SWITCH) !== null) d = h.getNodeMainDom(b).id, i = "switchNode";
					else {
						if (o = h.getMDom(c, b, [{
								tagName: "a",
								attrName: "treeNode" + g.id.A
							}])) d = h.getNodeMainDom(o).id, i = "clickNode"
					}
				else if (h.eqs(a.type, "dblclick") && (m = "dblclick", o = h.getMDom(c, b, [{
						tagName: "a",
						attrName: "treeNode" + g.id.A
					}]))) d = h.getNodeMainDom(o).id, i = "switchNode";
				if (m.length > 0 && d.length == 0 && (o = h.getMDom(c, b, [{
						tagName: "a",
						attrName: "treeNode" + g.id.A
					}]))) d = h.getNodeMainDom(o).id;
				if (d.length > 0) switch (f = e.getNodeCache(c, d), i) {
					case "switchNode":
						e.nodeIsParent(c,
							f) ? h.eqs(a.type, "click") || h.eqs(a.type, "dblclick") && h.apply(c.view.dblClickExpand, [c.treeId, f],
							c.view.dblClickExpand) ? k = J : i = "" : i = "";
						break;
					case "clickNode":
						k = K
				}
				switch (m) {
					case "mousedown":
						j = L;
						break;
					case "mouseup":
						j = M;
						break;
					case "dblclick":
						j = N;
						break;
					case "contextmenu":
						j = O
				}
				return {
					stop: !1,
					node: f,
					nodeEventType: i,
					nodeEventCallback: k,
					treeEventType: m,
					treeEventCallback: j
				}
			}],
			C = [function(a) {
				var b = e.getRoot(a);
				b || (b = {}, e.setRoot(a, b));
				e.nodeChildren(a, b, []);
				b.expandTriggerFlag = !1;
				b.curSelectedList = [];
				b.noSelection = !0;
				b.createdNodes = [];
				b.zId = 0;
				b._ver = (new Date).getTime()
			}],
			D = [],
			E = [],
			F = [],
			G = [],
			H = [],
			e = {
				addNodeCache: function(a, b) {
					e.getCache(a).nodes[e.getNodeCacheId(b.tId)] = b
				},
				getNodeCacheId: function(a) {
					return a.substring(a.lastIndexOf("_") + 1)
				},
				addAfterA: function(a) {
					E.push(a)
				},
				addBeforeA: function(a) {
					D.push(a)
				},
				addInnerAfterA: function(a) {
					G.push(a)
				},
				addInnerBeforeA: function(a) {
					F.push(a)
				},
				addInitBind: function(a) {
					y.push(a)
				},
				addInitUnBind: function(a) {
					z.push(a)
				},
				addInitCache: function(a) {
					A.push(a)
				},
				addInitNode: function(a) {
					B.push(a)
				},
				addInitProxy: function(a, b) {
					b ? u.splice(0, 0, a) : u.push(a)
				},
				addInitRoot: function(a) {
					C.push(a)
				},
				addNodesData: function(a, b, c, d) {
					var f = e.nodeChildren(a, b);
					f ? c >= f.length && (c = -1) : (f = e.nodeChildren(a, b, []), c = -1);
					if (f.length > 0 && c === 0) f[0].isFirstNode = !1, j.setNodeLineIcos(a, f[0]);
					else if (f.length > 0 && c < 0) f[f.length - 1].isLastNode = !1, j.setNodeLineIcos(a, f[f.length - 1]);
					e.nodeIsParent(a, b, !0);
					c < 0 ? e.nodeChildren(a, b, f.concat(d)) : (a = [c, 0].concat(d), f.splice.apply(f, a))
				},
				addSelectedNode: function(a, b) {
					var c = e.getRoot(a);
					e.isSelectedNode(a, b) || c.curSelectedList.push(b)
				},
				addCreatedNode: function(a, b) {
					(a.callback.onNodeCreated || a.view.addDiyDom) && e.getRoot(a).createdNodes.push(b)
				},
				addZTreeTools: function(a) {
					H.push(a)
				},
				exSetting: function(a) {
					r.extend(!0, P, a)
				},
				fixPIdKeyValue: function(a, b) {
					a.data.simpleData.enable && (b[a.data.simpleData.pIdKey] = b.parentTId ? b.getParentNode()[a.data.simpleData.idKey] :
						a.data.simpleData.rootPId)
				},
				getAfterA: function(a, b, c) {
					for (var d = 0, e = E.length; d < e; d++) E[d].apply(this, arguments)
				},
				getBeforeA: function(a,
					b, c) {
					for (var d = 0, e = D.length; d < e; d++) D[d].apply(this, arguments)
				},
				getInnerAfterA: function(a, b, c) {
					for (var d = 0, e = G.length; d < e; d++) G[d].apply(this, arguments)
				},
				getInnerBeforeA: function(a, b, c) {
					for (var d = 0, e = F.length; d < e; d++) F[d].apply(this, arguments)
				},
				getCache: function(a) {
					return x[a.treeId]
				},
				getNodeIndex: function(a, b) {
					if (!b) return null;
					for (var c = b.parentTId ? b.getParentNode() : e.getRoot(a), c = e.nodeChildren(a, c), d = 0, f = c.length - 1; d <=
						f; d++)
						if (c[d] === b) return d;
					return -1
				},
				getNextNode: function(a, b) {
					if (!b) return null;
					for (var c = b.parentTId ? b.getParentNode() : e.getRoot(a), c = e.nodeChildren(a, c), d = 0, f = c.length - 1; d <=
						f; d++)
						if (c[d] === b) return d == f ? null : c[d + 1];
					return null
				},
				getNodeByParam: function(a, b, c, d) {
					if (!b || !c) return null;
					for (var f = 0, i = b.length; f < i; f++) {
						var m = b[f];
						if (m[c] == d) return b[f];
						m = e.nodeChildren(a, m);
						if (m = e.getNodeByParam(a, m, c, d)) return m
					}
					return null
				},
				getNodeCache: function(a, b) {
					if (!b) return null;
					var c = x[a.treeId].nodes[e.getNodeCacheId(b)];
					return c ? c : null
				},
				getNodePath: function(a, b) {
					if (!b) return null;
					var c;
					(c = b.parentTId ? b.getParentNode().getPath() : []) && c.push(b);
					return c
				},
				getNodes: function(a) {
					return e.nodeChildren(a, e.getRoot(a))
				},
				getNodesByParam: function(a, b, c, d) {
					if (!b || !c) return [];
					for (var f = [], i = 0, m = b.length; i < m; i++) {
						var k = b[i];
						k[c] == d && f.push(k);
						k = e.nodeChildren(a, k);
						f = f.concat(e.getNodesByParam(a, k, c, d))
					}
					return f
				},
				getNodesByParamFuzzy: function(a, b, c, d) {
					if (!b || !c) return [];
					for (var f = [], d = d.toLowerCase(), i = 0, m = b.length; i < m; i++) {
						var k = b[i];
						typeof k[c] == "string" && b[i][c].toLowerCase().indexOf(d) > -1 &&
							f.push(k);
						k = e.nodeChildren(a, k);
						f = f.concat(e.getNodesByParamFuzzy(a, k, c, d))
					}
					return f
				},
				getNodesByFilter: function(a, b, c, d, f) {
					if (!b) return d ? null : [];
					for (var i = d ? null : [], m = 0, k = b.length; m < k; m++) {
						var g = b[m];
						if (h.apply(c, [g, f], !1)) {
							if (d) return g;
							i.push(g)
						}
						g = e.nodeChildren(a, g);
						g = e.getNodesByFilter(a, g, c, d, f);
						if (d && g) return g;
						i = d ? g : i.concat(g)
					}
					return i
				},
				getPreNode: function(a, b) {
					if (!b) return null;
					for (var c = b.parentTId ? b.getParentNode() : e.getRoot(a), c = e.nodeChildren(a, c), d = 0, f = c.length; d <
						f; d++)
						if (c[d] === b) return d ==
							0 ? null : c[d - 1];
					return null
				},
				getRoot: function(a) {
					return a ? w[a.treeId] : null
				},
				getRoots: function() {
					return w
				},
				getSetting: function(a) {
					return t[a]
				},
				getSettings: function() {
					return t
				},
				getZTreeTools: function(a) {
					return (a = this.getRoot(this.getSetting(a))) ? a.treeTools : null
				},
				initCache: function(a) {
					for (var b = 0, c = A.length; b < c; b++) A[b].apply(this, arguments)
				},
				initNode: function(a, b, c, d, e, i) {
					for (var m = 0, g = B.length; m < g; m++) B[m].apply(this, arguments)
				},
				initRoot: function(a) {
					for (var b = 0, c = C.length; b < c; b++) C[b].apply(this, arguments)
				},
				isSelectedNode: function(a, b) {
					for (var c = e.getRoot(a), d = 0, f = c.curSelectedList.length; d < f; d++)
						if (b === c.curSelectedList[d]) return !0;
					return !1
				},
				nodeChildren: function(a, b, c) {
					if (!b) return null;
					a = a.data.key.children;
					typeof c !== "undefined" && (b[a] = c);
					return b[a]
				},
				nodeIsParent: function(a, b, c) {
					if (!b) return !1;
					a = a.data.key.isParent;
					typeof c !== "undefined" && (typeof c === "string" && (c = h.eqs(c, "true")), b[a] = !!c);
					return b[a]
				},
				nodeName: function(a, b, c) {
					a = a.data.key.name;
					typeof c !== "undefined" && (b[a] = c);
					return "" + b[a]
				},
				nodeTitle: function(a,
					b) {
					return "" + b[a.data.key.title === "" ? a.data.key.name : a.data.key.title]
				},
				removeNodeCache: function(a, b) {
					var c = e.nodeChildren(a, b);
					if (c)
						for (var d = 0, f = c.length; d < f; d++) e.removeNodeCache(a, c[d]);
					e.getCache(a).nodes[e.getNodeCacheId(b.tId)] = null
				},
				removeSelectedNode: function(a, b) {
					for (var c = e.getRoot(a), d = 0, f = c.curSelectedList.length; d < f; d++)
						if (b === c.curSelectedList[d] || !e.getNodeCache(a, c.curSelectedList[d].tId)) c.curSelectedList.splice(d, 1),
							a.treeObj.trigger(g.event.UNSELECTED, [a.treeId, b]), d--, f--
				},
				setCache: function(a,
					b) {
					x[a.treeId] = b
				},
				setRoot: function(a, b) {
					w[a.treeId] = b
				},
				setZTreeTools: function(a, b) {
					for (var c = 0, d = H.length; c < d; c++) H[c].apply(this, arguments)
				},
				transformToArrayFormat: function(a, b) {
					function c(b) {
						d.push(b);
						(b = e.nodeChildren(a, b)) && (d = d.concat(e.transformToArrayFormat(a, b)))
					}
					if (!b) return [];
					var d = [];
					if (h.isArray(b))
						for (var f = 0, i = b.length; f < i; f++) c(b[f]);
					else c(b);
					return d
				},
				transformTozTreeFormat: function(a, b) {
					var c, d, f = a.data.simpleData.idKey,
						i = a.data.simpleData.pIdKey;
					if (!f || f == "" || !b) return [];
					if (h.isArray(b)) {
						var g = [],
							k = {};
						for (c = 0, d = b.length; c < d; c++) k[b[c][f]] = b[c];
						for (c = 0, d = b.length; c < d; c++) {
							var j = k[b[c][i]];
							if (j && b[c][f] != b[c][i]) {
								var o = e.nodeChildren(a, j);
								o || (o = e.nodeChildren(a, j, []));
								o.push(b[c])
							} else g.push(b[c])
						}
						return g
					} else return [b]
				}
			},
			n = {
				bindEvent: function(a) {
					for (var b = 0, c = y.length; b < c; b++) y[b].apply(this, arguments)
				},
				unbindEvent: function(a) {
					for (var b = 0, c = z.length; b < c; b++) z[b].apply(this, arguments)
				},
				bindTree: function(a) {
					var b = {
							treeId: a.treeId
						},
						c = a.treeObj;
					a.view.txtSelectedEnable || c.bind("selectstart",
						v).css({
						"-moz-user-select": "-moz-none"
					});
					c.bind("click", b, n.proxy);
					c.bind("dblclick", b, n.proxy);
					c.bind("mouseover", b, n.proxy);
					c.bind("mouseout", b, n.proxy);
					c.bind("mousedown", b, n.proxy);
					c.bind("mouseup", b, n.proxy);
					c.bind("contextmenu", b, n.proxy)
				},
				unbindTree: function(a) {
					a.treeObj.unbind("selectstart", v).unbind("click", n.proxy).unbind("dblclick", n.proxy).unbind("mouseover", n.proxy)
						.unbind("mouseout", n.proxy).unbind("mousedown", n.proxy).unbind("mouseup", n.proxy).unbind("contextmenu", n.proxy)
				},
				doProxy: function(a) {
					for (var b = [], c = 0, d = u.length; c < d; c++) {
						var e = u[c].apply(this, arguments);
						b.push(e);
						if (e.stop) break
					}
					return b
				},
				proxy: function(a) {
					var b = e.getSetting(a.data.treeId);
					if (!h.uCanDo(b, a)) return !0;
					for (var b = n.doProxy(a), c = !0, d = 0, f = b.length; d < f; d++) {
						var i = b[d];
						i.nodeEventCallback && (c = i.nodeEventCallback.apply(i, [a, i.node]) && c);
						i.treeEventCallback && (c = i.treeEventCallback.apply(i, [a, i.node]) && c)
					}
					return c
				}
			};
		J = function(a, b) {
			var c = e.getSetting(a.data.treeId);
			if (b.open) {
				if (h.apply(c.callback.beforeCollapse, [c.treeId, b], !0) ==
					!1) return !0
			} else if (h.apply(c.callback.beforeExpand, [c.treeId, b], !0) == !1) return !0;
			e.getRoot(c).expandTriggerFlag = !0;
			j.switchNode(c, b);
			return !0
		};
		K = function(a, b) {
			var c = e.getSetting(a.data.treeId),
				d = c.view.autoCancelSelected && (a.ctrlKey || a.metaKey) && e.isSelectedNode(c, b) ? 0 : c.view.autoCancelSelected &&
				(a.ctrlKey || a.metaKey) && c.view.selectedMulti ? 2 : 1;
			if (h.apply(c.callback.beforeClick, [c.treeId, b, d], !0) == !1) return !0;
			d === 0 ? j.cancelPreSelectedNode(c, b) : j.selectNode(c, b, d === 2);
			c.treeObj.trigger(g.event.CLICK,
				[a, c.treeId, b, d]);
			return !0
		};
		L = function(a, b) {
			var c = e.getSetting(a.data.treeId);
			h.apply(c.callback.beforeMouseDown, [c.treeId, b], !0) && h.apply(c.callback.onMouseDown, [a, c.treeId, b]);
			return !0
		};
		M = function(a, b) {
			var c = e.getSetting(a.data.treeId);
			h.apply(c.callback.beforeMouseUp, [c.treeId, b], !0) && h.apply(c.callback.onMouseUp, [a, c.treeId, b]);
			return !0
		};
		N = function(a, b) {
			var c = e.getSetting(a.data.treeId);
			h.apply(c.callback.beforeDblClick, [c.treeId, b], !0) && h.apply(c.callback.onDblClick, [a, c.treeId, b]);
			return !0
		};
		O = function(a, b) {
			var c = e.getSetting(a.data.treeId);
			h.apply(c.callback.beforeRightClick, [c.treeId, b], !0) && h.apply(c.callback.onRightClick, [a, c.treeId, b]);
			return typeof c.callback.onRightClick != "function"
		};
		v = function(a) {
			a = a.originalEvent.srcElement.nodeName.toLowerCase();
			return a === "input" || a === "textarea"
		};
		var h = {
				apply: function(a, b, c) {
					return typeof a == "function" ? a.apply(Q, b ? b : []) : c
				},
				canAsync: function(a, b) {
					var c = e.nodeChildren(a, b),
						d = e.nodeIsParent(a, b);
					return a.async.enable && b && d && !(b.zAsync || c && c.length >
						0)
				},
				clone: function(a) {
					if (a === null) return null;
					var b = h.isArray(a) ? [] : {},
						c;
					for (c in a) b[c] = a[c] instanceof Date ? new Date(a[c].getTime()) : typeof a[c] === "object" ? h.clone(a[c]) :
						a[c];
					return b
				},
				eqs: function(a, b) {
					return a.toLowerCase() === b.toLowerCase()
				},
				isArray: function(a) {
					return Object.prototype.toString.apply(a) === "[object Array]"
				},
				isElement: function(a) {
					return typeof HTMLElement === "object" ? a instanceof HTMLElement : a && typeof a === "object" && a !== null &&
						a.nodeType === 1 && typeof a.nodeName === "string"
				},
				$: function(a,
					b, c) {
					b && typeof b != "string" && (c = b, b = "");
					return typeof a == "string" ? r(a, c ? c.treeObj.get(0).ownerDocument : null) : r("#" + a.tId + b, c ? c.treeObj :
						null)
				},
				getMDom: function(a, b, c) {
					if (!b) return null;
					for (; b && b.id !== a.treeId;) {
						for (var d = 0, e = c.length; b.tagName && d < e; d++)
							if (h.eqs(b.tagName, c[d].tagName) && b.getAttribute(c[d].attrName) !== null) return b;
						b = b.parentNode
					}
					return null
				},
				getNodeMainDom: function(a) {
					return r(a).parent("li").get(0) || r(a).parentsUntil("li").parent().get(0)
				},
				isChildOrSelf: function(a, b) {
					return r(a).closest("#" +
						b).length > 0
				},
				uCanDo: function() {
					return !0
				}
			},
			j = {
				addNodes: function(a, b, c, d, f) {
					var i = e.nodeIsParent(a, b);
					if (!a.data.keep.leaf || !b || i)
						if (h.isArray(d) || (d = [d]), a.data.simpleData.enable && (d = e.transformTozTreeFormat(a, d)), b) {
							var i = l(b, g.id.SWITCH, a),
								m = l(b, g.id.ICON, a),
								k = l(b, g.id.UL, a);
							if (!b.open) j.replaceSwitchClass(b, i, g.folder.CLOSE), j.replaceIcoClass(b, m, g.folder.CLOSE), b.open = !
								1, k.css({
									display: "none"
								});
							e.addNodesData(a, b, c, d);
							j.createNodes(a, b.level + 1, d, b, c);
							f || j.expandCollapseParentNode(a, b, !0)
						} else e.addNodesData(a,
							e.getRoot(a), c, d), j.createNodes(a, 0, d, null, c)
				},
				appendNodes: function(a, b, c, d, f, i, g) {
					if (!c) return [];
					var k = [],
						h = d ? d : e.getRoot(a),
						h = e.nodeChildren(a, h),
						o, l;
					if (!h || f >= h.length - c.length) f = -1;
					for (var s = 0, n = c.length; s < n; s++) {
						var p = c[s];
						i && (o = (f === 0 || h.length == c.length) && s == 0, l = f < 0 && s == c.length - 1, e.initNode(a, b, p, d,
							o, l, g), e.addNodeCache(a, p));
						o = e.nodeIsParent(a, p);
						l = [];
						var I = e.nodeChildren(a, p);
						I && I.length > 0 && (l = j.appendNodes(a, b + 1, I, p, -1, i, g && p.open));
						g && (j.makeDOMNodeMainBefore(k, a, p), j.makeDOMNodeLine(k,
								a, p), e.getBeforeA(a, p, k), j.makeDOMNodeNameBefore(k, a, p), e.getInnerBeforeA(a, p, k), j.makeDOMNodeIcon(
								k, a, p), e.getInnerAfterA(a, p, k), j.makeDOMNodeNameAfter(k, a, p), e.getAfterA(a, p, k), o && p.open &&
							j.makeUlHtml(a, p, k, l.join("")), j.makeDOMNodeMainAfter(k, a, p), e.addCreatedNode(a, p))
					}
					return k
				},
				appendParentULDom: function(a, b) {
					var c = [],
						d = l(b, a);
					!d.get(0) && b.parentTId && (j.appendParentULDom(a, b.getParentNode()), d = l(b, a));
					var f = l(b, g.id.UL, a);
					f.get(0) && f.remove();
					f = e.nodeChildren(a, b);
					f = j.appendNodes(a, b.level + 1,
						f, b, -1, !1, !0);
					j.makeUlHtml(a, b, c, f.join(""));
					d.append(c.join(""))
				},
				asyncNode: function(a, b, c, d) {
					var f, i;
					f = e.nodeIsParent(a, b);
					if (b && !f) return h.apply(d), !1;
					else if (b && b.isAjaxing) return !1;
					else if (h.apply(a.callback.beforeAsync, [a.treeId, b], !0) == !1) return h.apply(d), !1;
					if (b) b.isAjaxing = !0, l(b, g.id.ICON, a).attr({
						style: "",
						"class": g.className.BUTTON + " " + g.className.ICO_LOADING
					});
					var m = {},
						k = h.apply(a.async.autoParam, [a.treeId, b], a.async.autoParam);
					for (f = 0, i = k.length; b && f < i; f++) {
						var q = k[f].split("="),
							o =
							q;
						q.length > 1 && (o = q[1], q = q[0]);
						m[o] = b[q]
					}
					k = h.apply(a.async.otherParam, [a.treeId, b], a.async.otherParam);
					if (h.isArray(k))
						for (f = 0, i = k.length; f < i; f += 2) m[k[f]] = k[f + 1];
					else
						for (var n in k) m[n] = k[n];
					var s = e.getRoot(a)._ver;
					r.ajax({
						contentType: a.async.contentType,
						cache: !1,
						type: a.async.type,
						url: h.apply(a.async.url, [a.treeId, b], a.async.url),
						data: a.async.contentType.indexOf("application/json") > -1 ? JSON.stringify(m) : m,
						dataType: a.async.dataType,
						headers: a.async.headers,
						xhrFields: a.async.xhrFields,
						success: function(i) {
							if (s ==
								e.getRoot(a)._ver) {
								var f = [];
								try {
									f = !i || i.length == 0 ? [] : typeof i == "string" ? eval("(" + i + ")") : i
								} catch (k) {
									f = i
								}
								if (b) b.isAjaxing = null, b.zAsync = !0;
								j.setNodeLineIcos(a, b);
								f && f !== "" ? (f = h.apply(a.async.dataFilter, [a.treeId, b, f], f), j.addNodes(a, b, -1, f ? h.clone(
									f) : [], !!c)) : j.addNodes(a, b, -1, [], !!c);
								a.treeObj.trigger(g.event.ASYNC_SUCCESS, [a.treeId, b, i]);
								h.apply(d)
							}
						},
						error: function(c, d, i) {
							if (s == e.getRoot(a)._ver) {
								if (b) b.isAjaxing = null;
								j.setNodeLineIcos(a, b);
								a.treeObj.trigger(g.event.ASYNC_ERROR, [a.treeId, b, c, d, i])
							}
						}
					});
					return !0
				},
				cancelPreSelectedNode: function(a, b, c) {
					var d = e.getRoot(a).curSelectedList,
						f, i;
					for (f = d.length - 1; f >= 0; f--)
						if (i = d[f], b === i || !b && (!c || c !== i))
							if (l(i, g.id.A, a).removeClass(g.node.CURSELECTED), b) {
								e.removeSelectedNode(a, b);
								break
							} else d.splice(f, 1), a.treeObj.trigger(g.event.UNSELECTED, [a.treeId, i])
				},
				createNodeCallback: function(a) {
					if (a.callback.onNodeCreated || a.view.addDiyDom)
						for (var b = e.getRoot(a); b.createdNodes.length > 0;) {
							var c = b.createdNodes.shift();
							h.apply(a.view.addDiyDom, [a.treeId, c]);
							a.callback.onNodeCreated &&
								a.treeObj.trigger(g.event.NODECREATED, [a.treeId, c])
						}
				},
				createNodes: function(a, b, c, d, f) {
					if (c && c.length != 0) {
						var i = e.getRoot(a),
							m = !d || d.open || !!l(e.nodeChildren(a, d)[0], a).get(0);
						i.createdNodes = [];
						var b = j.appendNodes(a, b, c, d, f, !0, m),
							k, h;
						d ? (d = l(d, g.id.UL, a), d.get(0) && (k = d)) : k = a.treeObj;
						k && (f >= 0 && (h = k.children()[f]), f >= 0 && h ? r(h).before(b.join("")) : k.append(b.join("")));
						j.createNodeCallback(a)
					}
				},
				destroy: function(a) {
					a && (e.initCache(a), e.initRoot(a), n.unbindTree(a), n.unbindEvent(a), a.treeObj.empty(), delete t[a.treeId])
				},
				expandCollapseNode: function(a, b, c, d, f) {
					var i = e.getRoot(a),
						m;
					if (b) {
						var k = e.nodeChildren(a, b),
							q = e.nodeIsParent(a, b);
						if (i.expandTriggerFlag) m = f, f = function() {
							m && m();
							b.open ? a.treeObj.trigger(g.event.EXPAND, [a.treeId, b]) : a.treeObj.trigger(g.event.COLLAPSE, [a.treeId,
								b
							])
						}, i.expandTriggerFlag = !1;
						if (!b.open && q && (!l(b, g.id.UL, a).get(0) || k && k.length > 0 && !l(k[0], a).get(0))) j.appendParentULDom(
							a, b), j.createNodeCallback(a);
						if (b.open == c) h.apply(f, []);
						else {
							var c = l(b, g.id.UL, a),
								i = l(b, g.id.SWITCH, a),
								o = l(b, g.id.ICON,
									a);
							q ? (b.open = !b.open, b.iconOpen && b.iconClose && o.attr("style", j.makeNodeIcoStyle(a, b)), b.open ? (j.replaceSwitchClass(
									b, i, g.folder.OPEN), j.replaceIcoClass(b, o, g.folder.OPEN), d == !1 || a.view.expandSpeed == "" ? (c.show(),
									h.apply(f, [])) : k && k.length > 0 ? c.slideDown(a.view.expandSpeed, f) : (c.show(), h.apply(f, []))) :
								(j.replaceSwitchClass(b, i, g.folder.CLOSE), j.replaceIcoClass(b, o, g.folder.CLOSE), d == !1 || a.view.expandSpeed ==
									"" || !(k && k.length > 0) ? (c.hide(), h.apply(f, [])) : c.slideUp(a.view.expandSpeed, f))) : h.apply(f,
								[])
						}
					} else h.apply(f,
						[])
				},
				expandCollapseParentNode: function(a, b, c, d, e) {
					b && (b.parentTId ? (j.expandCollapseNode(a, b, c, d), b.parentTId && j.expandCollapseParentNode(a, b.getParentNode(),
						c, d, e)) : j.expandCollapseNode(a, b, c, d, e))
				},
				expandCollapseSonNode: function(a, b, c, d, f) {
					var i = e.getRoot(a),
						i = b ? e.nodeChildren(a, b) : e.nodeChildren(a, i),
						g = b ? !1 : d,
						k = e.getRoot(a).expandTriggerFlag;
					e.getRoot(a).expandTriggerFlag = !1;
					if (i)
						for (var h = 0, l = i.length; h < l; h++) i[h] && j.expandCollapseSonNode(a, i[h], c, g);
					e.getRoot(a).expandTriggerFlag = k;
					j.expandCollapseNode(a,
						b, c, d, f)
				},
				isSelectedNode: function(a, b) {
					if (!b) return !1;
					var c = e.getRoot(a).curSelectedList,
						d;
					for (d = c.length - 1; d >= 0; d--)
						if (b === c[d]) return !0;
					return !1
				},
				makeDOMNodeIcon: function(a, b, c) {
					var d = e.nodeName(b, c),
						d = b.view.nameIsHTML ? d : d.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
					a.push("<span id='", c.tId, g.id.ICON, "' title='' treeNode", g.id.ICON, " class='", j.makeNodeIcoClass(b, c),
						"' style='", j.makeNodeIcoStyle(b, c), "'></span><span id='", c.tId, g.id.SPAN, "' class='", g.className.NAME,
						"'>",
						d, "</span>")
				},
				makeDOMNodeLine: function(a, b, c) {

					a.push("<span id='", c.tId, g.id.SWITCH, "' title='' class='", j.makeNodeLineClass(b, c), "' treeNode", g.id.SWITCH,
						"></span>")
				},
				makeDOMNodeMainAfter: function(a) {
					a.push("</li>")
				},
				makeDOMNodeMainBefore: function(a, b, c) {
					a.push("<li id='", c.tId, "' class='", g.className.LEVEL, c.level, "' tabindex='0' hidefocus='true' treenode>")
				},
				makeDOMNodeNameAfter: function(a) {
					a.push("</a>")
				},
				makeDOMNodeNameBefore: function(a, b, c) {
					var d = e.nodeTitle(b, c),
						f = j.makeNodeUrl(b, c),
						i = j.makeNodeFontCss(b,
							c),
						m = [],
						k;
					for (k in i) m.push(k, ":", i[k], ";");
					a.push("<a id='", c.tId, g.id.A, "' class='", g.className.LEVEL, c.level, "' treeNode", g.id.A, ' onclick="',
						c.click || "", '" ', f != null && f.length > 0 ? "href='" + f + "'" : "", " target='", j.makeNodeTarget(c),
						"' style='", m.join(""), "'");
					h.apply(b.view.showTitle, [b.treeId, c], b.view.showTitle) && d && a.push("title='", d.replace(/'/g, "&#39;").replace(
						/</g, "&lt;").replace(/>/g, "&gt;"), "'");
					a.push(">")
				},
				makeNodeFontCss: function(a, b) {
					var c = h.apply(a.view.fontCss, [a.treeId, b], a.view.fontCss);
					return c && typeof c != "function" ? c : {}
				},
				makeNodeIcoClass: function(a, b) {
					var c = ["ico"];
					if (!b.isAjaxing) {
						var d = e.nodeIsParent(a, b);
						c[0] = (b.iconSkin ? b.iconSkin + "_" : "") + c[0];
						d ? c.push(b.open ? g.folder.OPEN : g.folder.CLOSE) : c.push(g.folder.DOCU)
					}
					return g.className.BUTTON + " " + c.join("_")
				},
				makeNodeIcoStyle: function(a, b) {
					var c = [];
					if (!b.isAjaxing) {
						var d = e.nodeIsParent(a, b) && b.iconOpen && b.iconClose ? b.open ? b.iconOpen : b.iconClose : b[a.data.key.icon];
						d && c.push("background:url(", d, ") 0 0 no-repeat;");
						(a.view.showIcon ==
							!1 || !h.apply(a.view.showIcon, [a.treeId, b], !0)) && c.push("width:0px;height:0px;")
					}
					return c.join("")
				},
				makeNodeLineClass: function(a, b) {
					var c = [];
					a.view.showLine ? b.level == 0 && b.isFirstNode && b.isLastNode ? c.push(g.line.ROOT) : b.level == 0 && b.isFirstNode ?
						c.push(g.line.ROOTS) : b.isLastNode ? c.push(g.line.BOTTOM) : c.push(g.line.CENTER) : c.push(g.line.NOLINE);
					e.nodeIsParent(a, b) ? c.push(b.open ? g.folder.OPEN : g.folder.CLOSE) : c.push(g.folder.DOCU);
					return j.makeNodeLineClassEx(b) + c.join("_")
				},
				makeNodeLineClassEx: function(a) {
					return g.className.BUTTON +
						" " + g.className.LEVEL + a.level + " " + g.className.SWITCH + " "
				},
				makeNodeTarget: function(a) {
					return a.target || "_blank"
				},
				makeNodeUrl: function(a, b) {
					var c = a.data.key.url;
					return b[c] ? b[c] : null
				},
				makeUlHtml: function(a, b, c, d) {
					c.push("<ul id='", b.tId, g.id.UL, "' class='", g.className.LEVEL, b.level, " ", j.makeUlLineClass(a, b),
						"' style='display:", b.open ? "block" : "none", "'>");
					c.push(d);
					c.push("</ul>")
				},
				makeUlLineClass: function(a, b) {
					return a.view.showLine && !b.isLastNode ? g.line.LINE : ""
				},
				removeChildNodes: function(a, b) {
					if (b) {
						var c =
							e.nodeChildren(a, b);
						if (c) {
							for (var d = 0, f = c.length; d < f; d++) e.removeNodeCache(a, c[d]);
							e.removeSelectedNode(a);
							delete b[a.data.key.children];
							a.data.keep.parent ? l(b, g.id.UL, a).empty() : (e.nodeIsParent(a, b, !1), b.open = !1, c = l(b, g.id.SWITCH,
									a), d = l(b, g.id.ICON, a), j.replaceSwitchClass(b, c, g.folder.DOCU), j.replaceIcoClass(b, d, g.folder.DOCU),
								l(b, g.id.UL, a).remove())
						}
					}
				},
				scrollIntoView: function(a, b) {
					if (b)
						if (typeof Element === "undefined") {
							var c = a.treeObj.get(0).getBoundingClientRect(),
								d = b.getBoundingClientRect();
							(d.top <
								c.top || d.bottom > c.bottom || d.right > c.right || d.left < c.left) && b.scrollIntoView()
						} else {
							if (!Element.prototype.scrollIntoViewIfNeeded) Element.prototype.scrollIntoViewIfNeeded = function(a) {
								function b(a, c) {
									return {
										start: a,
										length: c,
										end: a + c
									}
								}

								function c(b, d) {
									return !1 === a || d.start < b.end && b.start < d.end ? Math.max(b.end - d.length, Math.min(d.start, b.start)) :
										(b.start + b.end - d.length) / 2
								}

								function d(a, b) {
									return {
										x: a,
										y: b,
										translate: function(c, i) {
											return d(a + c, b + i)
										}
									}
								}

								function e(a, b) {
									for (; a;) b = b.translate(a.offsetLeft, a.offsetTop),
										a = a.offsetParent;
									return b
								}
								for (var g = e(this, d(0, 0)), j = d(this.offsetWidth, this.offsetHeight), h = this.parentNode, l; h instanceof HTMLElement;)
									l = e(h, d(h.clientLeft, h.clientTop)), h.scrollLeft = c(b(g.x - l.x, j.x), b(h.scrollLeft, h.clientWidth)),
									h.scrollTop = c(b(g.y - l.y, j.y), b(h.scrollTop, h.clientHeight)), g = g.translate(-h.scrollLeft, -h.scrollTop),
									h = h.parentNode
							};
							b.scrollIntoViewIfNeeded()
						}
				},
				setFirstNode: function(a, b) {
					var c = e.nodeChildren(a, b);
					if (c.length > 0) c[0].isFirstNode = !0
				},
				setLastNode: function(a, b) {
					var c = e.nodeChildren(a,
						b);
					if (c.length > 0) c[c.length - 1].isLastNode = !0
				},
				removeNode: function(a, b) {
					var c = e.getRoot(a),
						d = b.parentTId ? b.getParentNode() : c;
					b.isFirstNode = !1;
					b.isLastNode = !1;
					b.getPreNode = function() {
						return null
					};
					b.getNextNode = function() {
						return null
					};
					if (e.getNodeCache(a, b.tId)) {
						l(b, a).remove();
						e.removeNodeCache(a, b);
						e.removeSelectedNode(a, b);
						for (var f = e.nodeChildren(a, d), i = 0, h = f.length; i < h; i++)
							if (f[i].tId == b.tId) {
								f.splice(i, 1);
								break
							} j.setFirstNode(a, d);
						j.setLastNode(a, d);
						var k, i = f.length;
						if (!a.data.keep.parent && i ==
							0) e.nodeIsParent(a, d, !1), d.open = !1, delete d[a.data.key.children], i = l(d, g.id.UL, a), h = l(d, g.id
							.SWITCH, a), k = l(d, g.id.ICON, a), j.replaceSwitchClass(d, h, g.folder.DOCU), j.replaceIcoClass(d, k, g.folder
							.DOCU), i.css("display", "none");
						else if (a.view.showLine && i > 0) {
							var q = f[i - 1],
								i = l(q, g.id.UL, a),
								h = l(q, g.id.SWITCH, a);
							k = l(q, g.id.ICON, a);
							d == c ? f.length == 1 ? j.replaceSwitchClass(q, h, g.line.ROOT) : (c = l(f[0], g.id.SWITCH, a), j.replaceSwitchClass(
								f[0], c, g.line.ROOTS), j.replaceSwitchClass(q, h, g.line.BOTTOM)) : j.replaceSwitchClass(q,
								h, g.line.BOTTOM);
							i.removeClass(g.line.LINE)
						}
					}
				},
				replaceIcoClass: function(a, b, c) {
					if (b && !a.isAjaxing && (a = b.attr("class"), a != void 0)) {
						a = a.split("_");
						switch (c) {
							case g.folder.OPEN:
							case g.folder.CLOSE:
							case g.folder.DOCU:
								a[a.length - 1] = c
						}
						b.attr("class", a.join("_"))
					}
				},
				replaceSwitchClass: function(a, b, c) {
					if (b) {
						var d = b.attr("class");
						if (d != void 0) {
							d = d.split("_");
							switch (c) {
								case g.line.ROOT:
								case g.line.ROOTS:
								case g.line.CENTER:
								case g.line.BOTTOM:
								case g.line.NOLINE:
									d[0] = j.makeNodeLineClassEx(a) + c;
									break;
								case g.folder.OPEN:
								case g.folder.CLOSE:
								case g.folder.DOCU:
									d[1] =
										c
							}
							b.attr("class", d.join("_"));
							c !== g.folder.DOCU ? b.removeAttr("disabled") : b.attr("disabled", "disabled")
						}
					}
				},
				selectNode: function(a, b, c) {
					c || j.cancelPreSelectedNode(a, null, b);
					l(b, g.id.A, a).addClass(g.node.CURSELECTED);
					e.addSelectedNode(a, b);
					a.treeObj.trigger(g.event.SELECTED, [a.treeId, b])
				},
				setNodeFontCss: function(a, b) {
					var c = l(b, g.id.A, a),
						d = j.makeNodeFontCss(a, b);
					d && c.css(d)
				},
				setNodeLineIcos: function(a, b) {
					if (b) {
						var c = l(b, g.id.SWITCH, a),
							d = l(b, g.id.UL, a),
							f = l(b, g.id.ICON, a),
							i = j.makeUlLineClass(a, b);
						i.length ==
							0 ? d.removeClass(g.line.LINE) : d.addClass(i);
						c.attr("class", j.makeNodeLineClass(a, b));
						e.nodeIsParent(a, b) ? c.removeAttr("disabled") : c.attr("disabled", "disabled");
						f.removeAttr("style");
						f.attr("style", j.makeNodeIcoStyle(a, b));
						f.attr("class", j.makeNodeIcoClass(a, b))
					}
				},
				setNodeName: function(a, b) {
					var c = e.nodeTitle(a, b),
						d = l(b, g.id.SPAN, a);
					d.empty();
					a.view.nameIsHTML ? d.html(e.nodeName(a, b)) : d.text(e.nodeName(a, b));
					h.apply(a.view.showTitle, [a.treeId, b], a.view.showTitle) && l(b, g.id.A, a).attr("title", !c ? "" : c)
				},
				setNodeTarget: function(a, b) {
					l(b, g.id.A, a).attr("target", j.makeNodeTarget(b))
				},
				setNodeUrl: function(a, b) {
					var c = l(b, g.id.A, a),
						d = j.makeNodeUrl(a, b);
					d == null || d.length == 0 ? c.removeAttr("href") : c.attr("href", d)
				},
				switchNode: function(a, b) {
					b.open || !h.canAsync(a, b) ? j.expandCollapseNode(a, b, !b.open) : a.async.enable ? j.asyncNode(a, b) || j.expandCollapseNode(
						a, b, !b.open) : b && j.expandCollapseNode(a, b, !b.open)
				}
			};
		r.fn.zTree = {
			consts: {
				className: {
					BUTTON: "button",
					LEVEL: "level",
					ICO_LOADING: "ico_loading",
					SWITCH: "switch",
					NAME: "node_name"
				},
				event: {
					NODECREATED: "ztree_nodeCreated",
					CLICK: "ztree_click",
					EXPAND: "ztree_expand",
					COLLAPSE: "ztree_collapse",
					ASYNC_SUCCESS: "ztree_async_success",
					ASYNC_ERROR: "ztree_async_error",
					REMOVE: "ztree_remove",
					SELECTED: "ztree_selected",
					UNSELECTED: "ztree_unselected"
				},
				id: {
					A: "_a",
					ICON: "_ico",
					SPAN: "_span",
					SWITCH: "_switch",
					UL: "_ul"
				},
				line: {
					ROOT: "root",
					ROOTS: "roots",
					CENTER: "center",
					BOTTOM: "bottom",
					NOLINE: "noline",
					LINE: "line"
				},
				folder: {
					OPEN: "open",
					CLOSE: "close",
					DOCU: "docu"
				},
				node: {
					CURSELECTED: "curSelectedNode"
				}
			},
			_z: {
				tools: h,
				view: j,
				event: n,
				data: e
			},
			getZTreeObj: function(a) {
				return (a = e.getZTreeTools(a)) ? a : null
			},
			destroy: function(a) {
				if (a && a.length > 0) j.destroy(e.getSetting(a));
				else
					for (var b in t) j.destroy(t[b])
			},
			init: function(a, b, c) {
				var d = h.clone(P);
				r.extend(!0, d, b);
				d.treeId = a.attr("id");
				d.treeObj = a;
				d.treeObj.empty();
				t[d.treeId] = d;
				if (typeof document.body.style.maxHeight === "undefined") d.view.expandSpeed = "";
				e.initRoot(d);
				a = e.getRoot(d);
				c = c ? h.clone(h.isArray(c) ? c : [c]) : [];
				d.data.simpleData.enable ? e.nodeChildren(d, a, e.transformTozTreeFormat(d,
					c)) : e.nodeChildren(d, a, c);
				e.initCache(d);
				n.unbindTree(d);
				n.bindTree(d);
				n.unbindEvent(d);
				n.bindEvent(d);
				var f = {
					setting: d,
					addNodes: function(a, b, c, f) {
						function g() {
							j.addNodes(d, a, b, n, f == !0)
						}
						a || (a = null);
						var l = e.nodeIsParent(d, a);
						if (a && !l && d.data.keep.leaf) return null;
						l = parseInt(b, 10);
						isNaN(l) ? (f = !!c, c = b, b = -1) : b = l;
						if (!c) return null;
						var n = h.clone(h.isArray(c) ? c : [c]);
						h.canAsync(d, a) ? j.asyncNode(d, a, f, g) : g();
						return n
					},
					cancelSelectedNode: function(a) {
						j.cancelPreSelectedNode(d, a)
					},
					destroy: function() {
						j.destroy(d)
					},
					expandAll: function(a) {
						a = !!a;
						j.expandCollapseSonNode(d, null, a, !0);
						return a
					},
					expandNode: function(a, b, c, f, g) {
						function n() {
							var b = l(a, d).get(0);
							b && f !== !1 && j.scrollIntoView(d, b)
						}
						if (!a || !e.nodeIsParent(d, a)) return null;
						b !== !0 && b !== !1 && (b = !a.open);
						if ((g = !!g) && b && h.apply(d.callback.beforeExpand, [d.treeId, a], !0) == !1) return null;
						else if (g && !b && h.apply(d.callback.beforeCollapse, [d.treeId, a], !0) == !1) return null;
						b && a.parentTId && j.expandCollapseParentNode(d, a.getParentNode(), b, !1);
						if (b === a.open && !c) return null;
						e.getRoot(d).expandTriggerFlag = g;
						!h.canAsync(d, a) && c ? j.expandCollapseSonNode(d, a, b, !0, n) : (a.open = !b, j.switchNode(this.setting,
							a), n());
						return b
					},
					getNodes: function() {
						return e.getNodes(d)
					},
					getNodeByParam: function(a, b, c) {
						return !a ? null : e.getNodeByParam(d, c ? e.nodeChildren(d, c) : e.getNodes(d), a, b)
					},
					getNodeByTId: function(a) {
						return e.getNodeCache(d, a)
					},
					getNodesByParam: function(a, b, c) {
						return !a ? null : e.getNodesByParam(d, c ? e.nodeChildren(d, c) : e.getNodes(d), a, b)
					},
					getNodesByParamFuzzy: function(a, b, c) {
						return !a ? null :
							e.getNodesByParamFuzzy(d, c ? e.nodeChildren(d, c) : e.getNodes(d), a, b)
					},
					getNodesByFilter: function(a, b, c, f) {
						b = !!b;
						return !a || typeof a != "function" ? b ? null : [] : e.getNodesByFilter(d, c ? e.nodeChildren(d, c) : e.getNodes(
							d), a, b, f)
					},
					getNodeIndex: function(a) {
						if (!a) return null;
						for (var b = a.parentTId ? a.getParentNode() : e.getRoot(d), b = e.nodeChildren(d, b), c = 0, f = b.length; c <
							f; c++)
							if (b[c] == a) return c;
						return -1
					},
					getSelectedNodes: function() {
						for (var a = [], b = e.getRoot(d).curSelectedList, c = 0, f = b.length; c < f; c++) a.push(b[c]);
						return a
					},
					isSelectedNode: function(a) {
						return e.isSelectedNode(d, a)
					},
					reAsyncChildNodesPromise: function(a, b, c) {
						return new Promise(function(d, e) {
							try {
								f.reAsyncChildNodes(a, b, c, function() {
									d(a)
								})
							} catch (g) {
								e(g)
							}
						})
					},
					reAsyncChildNodes: function(a, b, c, f) {
						if (this.setting.async.enable) {
							var h = !a;
							h && (a = e.getRoot(d));
							if (b == "refresh") {
								for (var b = e.nodeChildren(d, a), n = 0, r = b ? b.length : 0; n < r; n++) e.removeNodeCache(d, b[n]);
								e.removeSelectedNode(d);
								e.nodeChildren(d, a, []);
								h ? this.setting.treeObj.empty() : l(a, g.id.UL, d).empty()
							}
							j.asyncNode(this.setting,
								h ? null : a, !!c, f)
						}
					},
					refresh: function() {
						this.setting.treeObj.empty();
						var a = e.getRoot(d),
							b = e.nodeChildren(d, a);
						e.initRoot(d);
						e.nodeChildren(d, a, b);
						e.initCache(d);
						j.createNodes(d, 0, e.nodeChildren(d, a), null, -1)
					},
					removeChildNodes: function(a) {
						if (!a) return null;
						var b = e.nodeChildren(d, a);
						j.removeChildNodes(d, a);
						return b ? b : null
					},
					removeNode: function(a, b) {
						a && (b = !!b, b && h.apply(d.callback.beforeRemove, [d.treeId, a], !0) == !1 || (j.removeNode(d, a), b &&
							this.setting.treeObj.trigger(g.event.REMOVE, [d.treeId, a])))
					},
					selectNode: function(a,
						b, c) {
						function e() {
							if (!c) {
								var b = l(a, d).get(0);
								j.scrollIntoView(d, b)
							}
						}
						if (a && h.uCanDo(d)) {
							b = d.view.selectedMulti && b;
							if (a.parentTId) j.expandCollapseParentNode(d, a.getParentNode(), !0, !1, e);
							else if (!c) try {
								l(a, d).focus().blur()
							} catch (f) {}
							j.selectNode(d, a, b)
						}
					},
					transformTozTreeNodes: function(a) {
						return e.transformTozTreeFormat(d, a)
					},
					transformToArray: function(a) {
						return e.transformToArrayFormat(d, a)
					},
					updateNode: function(a) {
						return;
						a && l(a, d).get(0) && h.uCanDo(d) && (j.setNodeName(d, a), j.setNodeTarget(d, a), j.setNodeUrl(d,
							a), j.setNodeLineIcos(d, a), j.setNodeFontCss(d, a))
					}
				};
				a.treeTools = f;
				e.setZTreeTools(d, f);
				(c = e.nodeChildren(d, a)) && c.length > 0 ? j.createNodes(d, 0, c, null, -1) : d.async.enable && d.async.url &&
					d.async.url !== "" && j.asyncNode(d);
				return f
			}
		};
		var Q = r.fn.zTree,
			l = h.$,
			g = Q.consts
	})(jQuery);

	/*
	 * JQuery zTree excheck v3.5.37
	 * http://treejs.cn/
	 *
	 * Copyright (c) 2010 Hunter.z
	 *
	 * Licensed same as jquery - MIT License
	 * http://www.opensource.org/licenses/mit-license.php
	 *
	 * email: hunter.z@263.net
	 * Date: 2018-08-21
	 */
	(function(n) {
		var q, r, s, p = {
				event: {
					CHECK: "ztree_check"
				},
				id: {
					CHECK: "_check"
				},
				checkbox: {
					STYLE: "checkbox",
					DEFAULT: "chk",
					DISABLED: "disable",
					FALSE: "false",
					TRUE: "true",
					FULL: "full",
					PART: "part",
					FOCUS: "focus"
				},
				radio: {
					STYLE: "radio",
					TYPE_ALL: "all",
					TYPE_LEVEL: "level"
				}
			},
			w = {
				check: {
					enable: !1,
					autoCheckTrigger: !1,
					chkStyle: p.checkbox.STYLE,
					nocheckInherit: !1,
					chkDisabledInherit: !1,
					radioType: p.radio.TYPE_LEVEL,
					chkboxType: {
						Y: "ps",
						N: "ps"
					}
				},
				data: {
					key: {
						checked: "checked"
					}
				},
				callback: {
					beforeCheck: null,
					onCheck: null
				}
			};
		q = function(c,
			a) {
			if (a.chkDisabled === !0) return !1;
			var b = e.getSetting(c.data.treeId);
			if (i.apply(b.callback.beforeCheck, [b.treeId, a], !0) == !1) return !0;
			var d = e.nodeChecked(b, a);
			e.nodeChecked(b, a, !d);
			f.checkNodeRelation(b, a);
			d = m(a, h.id.CHECK, b);
			f.setChkClass(b, d, a);
			f.repairParentChkClassWithSelf(b, a);
			b.treeObj.trigger(h.event.CHECK, [c, b.treeId, a]);
			return !0
		};
		r = function(c, a) {
			if (a.chkDisabled === !0) return !1;
			var b = e.getSetting(c.data.treeId),
				d = m(a, h.id.CHECK, b);
			a.check_Focus = !0;
			f.setChkClass(b, d, a);
			return !0
		};
		s = function(c,
			a) {
			if (a.chkDisabled === !0) return !1;
			var b = e.getSetting(c.data.treeId),
				d = m(a, h.id.CHECK, b);
			a.check_Focus = !1;
			f.setChkClass(b, d, a);
			return !0
		};
		n.extend(!0, n.fn.zTree.consts, p);
		n.extend(!0, n.fn.zTree._z, {
			tools: {},
			view: {
				checkNodeRelation: function(c, a) {
					var b, d, j;
					d = h.radio;
					b = e.nodeChecked(c, a);
					if (c.check.chkStyle == d.STYLE) {
						var g = e.getRadioCheckedList(c);
						if (b)
							if (c.check.radioType == d.TYPE_ALL) {
								for (d = g.length - 1; d >= 0; d--) {
									b = g[d];
									var k = e.nodeChecked(c, b);
									k && b != a && (e.nodeChecked(c, b, !1), g.splice(d, 1), f.setChkClass(c,
										m(b, h.id.CHECK, c), b), b.parentTId != a.parentTId && f.repairParentChkClassWithSelf(c, b))
								}
								g.push(a)
							} else {
								g = a.parentTId ? a.getParentNode() : e.getRoot(c);
								g = e.nodeChildren(c, g);
								for (d = 0, j = g.length; d < j; d++)
									if (b = g[d], (k = e.nodeChecked(c, b)) && b != a) e.nodeChecked(c, b, !1), f.setChkClass(c, m(b, h.id.CHECK,
										c), b)
							}
						else if (c.check.radioType == d.TYPE_ALL)
							for (d = 0, j = g.length; d < j; d++)
								if (a == g[d]) {
									g.splice(d, 1);
									break
								}
					} else g = e.nodeChildren(c, a), b && (!g || g.length == 0 || c.check.chkboxType.Y.indexOf("s") > -1) && f.setSonNodeCheckBox(
							c, a,
							!0), !b && (!g || g.length == 0 || c.check.chkboxType.N.indexOf("s") > -1) && f.setSonNodeCheckBox(c, a, !
							1), b && c.check.chkboxType.Y.indexOf("p") > -1 && f.setParentNodeCheckBox(c, a, !0), !b && c.check.chkboxType
						.N.indexOf("p") > -1 && f.setParentNodeCheckBox(c, a, !1)
				},
				makeChkClass: function(c, a) {
					var b = h.checkbox,
						d = h.radio,
						j = "",
						g = e.nodeChecked(c, a),
						j = a.chkDisabled === !0 ? b.DISABLED : a.halfCheck ? b.PART : c.check.chkStyle == d.STYLE ? a.check_Child_State <
						1 ? b.FULL : b.PART : g ? a.check_Child_State === 2 || a.check_Child_State === -1 ? b.FULL : b.PART :
						a.check_Child_State < 1 ? b.FULL : b.PART,
						d = c.check.chkStyle + "_" + (g ? b.TRUE : b.FALSE) + "_" + j,
						d = a.check_Focus && a.chkDisabled !== !0 ? d + "_" + b.FOCUS : d;
					return h.className.BUTTON + " " + b.DEFAULT + " " + d
				},
				repairAllChk: function(c, a) {
					if (c.check.enable && c.check.chkStyle === h.checkbox.STYLE)
						for (var b = e.getRoot(c), b = e.nodeChildren(c, b), d = 0, j = b.length; d < j; d++) {
							var g = b[d];
							g.nocheck !== !0 && g.chkDisabled !== !0 && e.nodeChecked(c, g, a);
							f.setSonNodeCheckBox(c, g, a)
						}
				},
				repairChkClass: function(c, a) {
					if (a && (e.makeChkFlag(c, a), a.nocheck !== !0)) {
						var b =
							m(a, h.id.CHECK, c);
						f.setChkClass(c, b, a)
					}
				},
				repairParentChkClass: function(c, a) {
					if (a && a.parentTId) {
						var b = a.getParentNode();
						f.repairChkClass(c, b);
						f.repairParentChkClass(c, b)
					}
				},
				repairParentChkClassWithSelf: function(c, a) {
					if (a) {
						var b = e.nodeChildren(c, a);
						b && b.length > 0 ? f.repairParentChkClass(c, b[0]) : f.repairParentChkClass(c, a)
					}
				},
				repairSonChkDisabled: function(c, a, b, d) {
					if (a) {
						if (a.chkDisabled != b) a.chkDisabled = b;
						f.repairChkClass(c, a);
						if ((a = e.nodeChildren(c, a)) && d)
							for (var j = 0, g = a.length; j < g; j++) f.repairSonChkDisabled(c,
								a[j], b, d)
					}
				},
				repairParentChkDisabled: function(c, a, b, d) {
					if (a) {
						if (a.chkDisabled != b && d) a.chkDisabled = b;
						f.repairChkClass(c, a);
						f.repairParentChkDisabled(c, a.getParentNode(), b, d)
					}
				},
				setChkClass: function(c, a, b) {
					a && (b.nocheck === !0 ? a.hide() : a.show(), a.attr("class", f.makeChkClass(c, b)))
				},
				setParentNodeCheckBox: function(c, a, b, d) {
					var j = m(a, h.id.CHECK, c);
					d || (d = a);
					e.makeChkFlag(c, a);
					a.nocheck !== !0 && a.chkDisabled !== !0 && (e.nodeChecked(c, a, b), f.setChkClass(c, j, a), c.check.autoCheckTrigger &&
						a != d && c.treeObj.trigger(h.event.CHECK,
							[null, c.treeId, a]));
					if (a.parentTId) {
						j = !0;
						if (!b)
							for (var g = e.nodeChildren(c, a.getParentNode()), k = 0, o = g.length; k < o; k++) {
								var l = g[k],
									i = e.nodeChecked(c, l);
								if (l.nocheck !== !0 && l.chkDisabled !== !0 && i || (l.nocheck === !0 || l.chkDisabled === !0) && l.check_Child_State >
									0) {
									j = !1;
									break
								}
							}
						j && f.setParentNodeCheckBox(c, a.getParentNode(), b, d)
					}
				},
				setSonNodeCheckBox: function(c, a, b, d) {
					if (a) {
						var j = m(a, h.id.CHECK, c);
						d || (d = a);
						var g = !1,
							k = e.nodeChildren(c, a);
						if (k)
							for (var o = 0, l = k.length; o < l; o++) {
								var i = k[o];
								f.setSonNodeCheckBox(c, i, b, d);
								i.chkDisabled === !0 && (g = !0)
							}
						if (a != e.getRoot(c) && a.chkDisabled !== !0) {
							g && a.nocheck !== !0 && e.makeChkFlag(c, a);
							if (a.nocheck !== !0 && a.chkDisabled !== !0) {
								if (e.nodeChecked(c, a, b), !g) a.check_Child_State = k && k.length > 0 ? b ? 2 : 0 : -1
							} else a.check_Child_State = -1;
							f.setChkClass(c, j, a);
							c.check.autoCheckTrigger && a != d && a.nocheck !== !0 && a.chkDisabled !== !0 && c.treeObj.trigger(h.event
								.CHECK, [null, c.treeId, a])
						}
					}
				}
			},
			event: {},
			data: {
				getRadioCheckedList: function(c) {
					for (var a = e.getRoot(c).radioCheckedList, b = 0, d = a.length; b < d; b++) e.getNodeCache(c,
						a[b].tId) || (a.splice(b, 1), b--, d--);
					return a
				},
				getCheckStatus: function(c, a) {
					if (!c.check.enable || a.nocheck || a.chkDisabled) return null;
					var b = e.nodeChecked(c, a);
					return {
						checked: b,
						half: a.halfCheck ? a.halfCheck : c.check.chkStyle == h.radio.STYLE ? a.check_Child_State === 2 : b ? a.check_Child_State >
							-1 && a.check_Child_State < 2 : a.check_Child_State > 0
					}
				},
				getTreeCheckedNodes: function(c, a, b, d) {
					if (!a) return [];
					for (var j = b && c.check.chkStyle == h.radio.STYLE && c.check.radioType == h.radio.TYPE_ALL, d = !d ? [] :
							d, g = 0, f = a.length; g < f; g++) {
						var i =
							a[g],
							l = e.nodeChildren(c, i),
							m = e.nodeChecked(c, i);
						if (i.nocheck !== !0 && i.chkDisabled !== !0 && m == b && (d.push(i), j)) break;
						e.getTreeCheckedNodes(c, l, b, d);
						if (j && d.length > 0) break
					}
					return d
				},
				getTreeChangeCheckedNodes: function(c, a, b) {
					if (!a) return [];
					for (var b = !b ? [] : b, d = 0, j = a.length; d < j; d++) {
						var g = a[d],
							f = e.nodeChildren(c, g),
							h = e.nodeChecked(c, g);
						g.nocheck !== !0 && g.chkDisabled !== !0 && h != g.checkedOld && b.push(g);
						e.getTreeChangeCheckedNodes(c, f, b)
					}
					return b
				},
				makeChkFlag: function(c, a) {
					if (a) {
						var b = -1,
							d = e.nodeChildren(c, a);
						if (d)
							for (var j = 0, g = d.length; j < g; j++) {
								var f = d[j],
									i = e.nodeChecked(c, f),
									l = -1;
								if (c.check.chkStyle == h.radio.STYLE)
									if (l = f.nocheck === !0 || f.chkDisabled === !0 ? f.check_Child_State : f.halfCheck === !0 ? 2 : i ? 2 :
										f.check_Child_State > 0 ? 2 : 0, l == 2) {
										b = 2;
										break
									} else l == 0 && (b = 0);
								else if (c.check.chkStyle == h.checkbox.STYLE)
									if (l = f.nocheck === !0 || f.chkDisabled === !0 ? f.check_Child_State : f.halfCheck === !0 ? 1 : i ? f.check_Child_State ===
										-1 || f.check_Child_State === 2 ? 2 : 1 : f.check_Child_State > 0 ? 1 : 0, l === 1) {
										b = 1;
										break
									} else if (l === 2 && b > -1 && j > 0 && l !==
									b) {
									b = 1;
									break
								} else if (b === 2 && l > -1 && l < 2) {
									b = 1;
									break
								} else l > -1 && (b = l)
							}
						a.check_Child_State = b
					}
				}
			}
		});
		var n = n.fn.zTree,
			i = n._z.tools,
			h = n.consts,
			f = n._z.view,
			e = n._z.data,
			m = i.$;
		e.nodeChecked = function(c, a, b) {
			if (!a) return !1;
			c = c.data.key.checked;
			typeof b !== "undefined" && (typeof b === "string" && (b = i.eqs(b, "true")), a[c] = !!b);
			return a[c]
		};
		e.exSetting(w);
		e.addInitBind(function(c) {
			c.treeObj.bind(h.event.CHECK, function(a, b, d, e) {
				a.srcEvent = b;
				i.apply(c.callback.onCheck, [a, d, e])
			})
		});
		e.addInitUnBind(function(c) {
			c.treeObj.unbind(h.event.CHECK)
		});
		e.addInitCache(function() {});
		e.addInitNode(function(c, a, b, d) {
			if (b) {
				a = e.nodeChecked(c, b);
				a = e.nodeChecked(c, b, a);
				b.checkedOld = a;
				if (typeof b.nocheck == "string") b.nocheck = i.eqs(b.nocheck, "true");
				b.nocheck = !!b.nocheck || c.check.nocheckInherit && d && !!d.nocheck;
				if (typeof b.chkDisabled == "string") b.chkDisabled = i.eqs(b.chkDisabled, "true");
				b.chkDisabled = !!b.chkDisabled || c.check.chkDisabledInherit && d && !!d.chkDisabled;
				if (typeof b.halfCheck == "string") b.halfCheck = i.eqs(b.halfCheck, "true");
				b.halfCheck = !!b.halfCheck;
				b.check_Child_State = -1;
				b.check_Focus = !1;
				b.getCheckStatus = function() {
					return e.getCheckStatus(c, b)
				};
				c.check.chkStyle == h.radio.STYLE && c.check.radioType == h.radio.TYPE_ALL && a && e.getRoot(c).radioCheckedList
					.push(b)
			}
		});
		e.addInitProxy(function(c) {
				var a = c.target,
					b = e.getSetting(c.data.treeId),
					d = "",
					f = null,
					g = "",
					k = null;
				if (i.eqs(c.type, "mouseover")) {
					if (b.check.enable && i.eqs(a.tagName, "span") && a.getAttribute("treeNode" + h.id.CHECK) !== null) d = i.getNodeMainDom(
						a).id, g = "mouseoverCheck"
				} else if (i.eqs(c.type, "mouseout")) {
					if (b.check.enable &&
						i.eqs(a.tagName, "span") && a.getAttribute("treeNode" + h.id.CHECK) !== null) d = i.getNodeMainDom(a).id, g =
						"mouseoutCheck"
				} else if (i.eqs(c.type, "click") && b.check.enable && i.eqs(a.tagName, "span") && a.getAttribute("treeNode" +
						h.id.CHECK) !== null) d = i.getNodeMainDom(a).id, g = "checkNode";
				if (d.length > 0) switch (f = e.getNodeCache(b, d), g) {
					case "checkNode":
						k = q;
						break;
					case "mouseoverCheck":
						k = r;
						break;
					case "mouseoutCheck":
						k = s
				}
				return {
					stop: g === "checkNode",
					node: f,
					nodeEventType: g,
					nodeEventCallback: k,
					treeEventType: "",
					treeEventCallback: null
				}
			},
			!0);
		e.addInitRoot(function(c) {
			e.getRoot(c).radioCheckedList = []
		});
		e.addBeforeA(function(c, a, b) {
			c.check.enable && (e.makeChkFlag(c, a), b.push("<span ID='", a.tId, h.id.CHECK, "' class='", f.makeChkClass(c,
				a), "' treeNode", h.id.CHECK, a.nocheck === !0 ? " style='display:none;'" : "", "></span>"))
		});
		e.addZTreeTools(function(c, a) {
			a.checkNode = function(a, b, g, k) {
				var o = e.nodeChecked(c, a);
				if (a.chkDisabled !== !0 && (b !== !0 && b !== !1 && (b = !o), k = !!k, (o !== b || g) && !(k && i.apply(this
						.setting.callback.beforeCheck, [this.setting.treeId, a],
						!0) == !1) && i.uCanDo(this.setting) && this.setting.check.enable && a.nocheck !== !0)) e.nodeChecked(c, a,
						b), b = m(a, h.id.CHECK, this.setting), (g || this.setting.check.chkStyle === h.radio.STYLE) && f.checkNodeRelation(
						this.setting, a), f.setChkClass(this.setting, b, a), f.repairParentChkClassWithSelf(this.setting, a), k &&
					this.setting.treeObj.trigger(h.event.CHECK, [null, this.setting.treeId, a])
			};
			a.checkAllNodes = function(a) {
				f.repairAllChk(this.setting, !!a)
			};
			a.getCheckedNodes = function(a) {
				var a = a !== !1,
					b = e.nodeChildren(c, e.getRoot(this.setting));
				return e.getTreeCheckedNodes(this.setting, b, a)
			};
			a.getChangeCheckedNodes = function() {
				var a = e.nodeChildren(c, e.getRoot(this.setting));
				return e.getTreeChangeCheckedNodes(this.setting, a)
			};
			a.setChkDisabled = function(a, b, c, e) {
				b = !!b;
				c = !!c;
				f.repairSonChkDisabled(this.setting, a, b, !!e);
				f.repairParentChkDisabled(this.setting, a.getParentNode(), b, c)
			};
			var b = a.updateNode;
			a.updateNode = function(c, e) {
				b && b.apply(a, arguments);
				if (c && this.setting.check.enable && m(c, this.setting).get(0) && i.uCanDo(this.setting)) {
					var g = m(c,
						h.id.CHECK, this.setting);
					(e == !0 || this.setting.check.chkStyle === h.radio.STYLE) && f.checkNodeRelation(this.setting, c);
					f.setChkClass(this.setting, g, c);
					f.repairParentChkClassWithSelf(this.setting, c)
				}
			}
		});
		var t = f.createNodes;
		f.createNodes = function(c, a, b, d, e) {
			t && t.apply(f, arguments);
			b && f.repairParentChkClassWithSelf(c, d)
		};
		var u = f.removeNode;
		f.removeNode = function(c, a) {
			var b = a.getParentNode();
			u && u.apply(f, arguments);
			a && b && (f.repairChkClass(c, b), f.repairParentChkClass(c, b))
		};
		var v = f.appendNodes;
		f.appendNodes =
			function(c, a, b, d, h, g, i) {
				var m = "";
				v && (m = v.apply(f, arguments));
				d && e.makeChkFlag(c, d);
				return m
			}
	})(jQuery);

	/*
	 * JQuery zTree exedit v3.5.37
	 * http://treejs.cn/
	 *
	 * Copyright (c) 2010 Hunter.z
	 *
	 * Licensed same as jquery - MIT License
	 * http://www.opensource.org/licenses/mit-license.php
	 *
	 * email: hunter.z@263.net
	 * Date: 2018-08-21
	 */
	(function(B) {
		var I = {
				event: {
					DRAG: "ztree_drag",
					DROP: "ztree_drop",
					RENAME: "ztree_rename",
					DRAGMOVE: "ztree_dragmove"
				},
				id: {
					EDIT: "_edit",
					INPUT: "_input",
					REMOVE: "_remove"
				},
				move: {
					TYPE_INNER: "inner",
					TYPE_PREV: "prev",
					TYPE_NEXT: "next"
				},
				node: {
					CURSELECTED_EDIT: "curSelectedNode_Edit",
					TMPTARGET_TREE: "tmpTargetzTree",
					TMPTARGET_NODE: "tmpTargetNode"
				}
			},
			v = {
				onHoverOverNode: function(a, b) {
					var c = i.getSetting(a.data.treeId),
						d = i.getRoot(c);
					if (d.curHoverNode != b) v.onHoverOutNode(a);
					d.curHoverNode = b;
					e.addHoverDom(c, b)
				},
				onHoverOutNode: function(a) {
					var a =
						i.getSetting(a.data.treeId),
						b = i.getRoot(a);
					if (b.curHoverNode && !i.isSelectedNode(a, b.curHoverNode)) e.removeTreeDom(a, b.curHoverNode), b.curHoverNode =
						null
				},
				onMousedownNode: function(a, b) {
					function c(a) {
						if (m.dragFlag == 0 && Math.abs(N - a.clientX) < f.edit.drag.minMoveSize && Math.abs(O - a.clientY) < f.edit.drag
							.minMoveSize) return !0;
						var b, c, g, j;
						L.css("cursor", "pointer");
						if (m.dragFlag == 0) {
							if (k.apply(f.callback.beforeDrag, [f.treeId, n], !0) == !1) return l(a), !0;
							for (b = 0, c = n.length; b < c; b++) {
								if (b == 0) m.dragNodeShowBefore = [];
								g = n[b];
								i.nodeIsParent(f, g) && g.open ? (e.expandCollapseNode(f, g, !g.open), m.dragNodeShowBefore[g.tId] = !0) :
									m.dragNodeShowBefore[g.tId] = !1
							}
							m.dragFlag = 1;
							y.showHoverDom = !1;
							k.showIfameMask(f, !0);
							j = !0;
							var p = -1;
							if (n.length > 1) {
								var o = n[0].parentTId ? i.nodeChildren(f, n[0].getParentNode()) : i.getNodes(f);
								g = [];
								for (b = 0, c = o.length; b < c; b++)
									if (m.dragNodeShowBefore[o[b].tId] !== void 0 && (j && p > -1 && p + 1 !== b && (j = !1), g.push(o[b]), p =
											b), n.length === g.length) {
										n = g;
										break
									}
							}
							j && (H = n[0].getPreNode(), Q = n[n.length - 1].getNextNode());
							C = q("<ul class='zTreeDragUL'></ul>",
								f);
							for (b = 0, c = n.length; b < c; b++) g = n[b], g.editNameFlag = !1, e.selectNode(f, g, b > 0), e.removeTreeDom(
								f, g), b > f.edit.drag.maxShowNodeNum - 1 || (j = q("<li id='" + g.tId + "_tmp'></li>", f), j.append(q(g,
									d.id.A, f).clone()), j.css("padding", "0"), j.children("#" + g.tId + d.id.A).removeClass(d.node.CURSELECTED),
								C.append(j), b == f.edit.drag.maxShowNodeNum - 1 && (j = q("<li id='" + g.tId +
									"_moretmp'><a>  ...  </a></li>", f), C.append(j)));
							C.attr("id", n[0].tId + d.id.UL + "_tmp");
							C.addClass(f.treeObj.attr("class"));
							C.appendTo(L);
							u = q("<span class='tmpzTreeMove_arrow'></span>",
								f);
							u.attr("id", "zTreeMove_arrow_tmp");
							u.appendTo(L);
							f.treeObj.trigger(d.event.DRAG, [a, f.treeId, n])
						}
						if (m.dragFlag == 1) {
							t && u.attr("id") == a.target.id && w && a.clientX + G.scrollLeft() + 2 > B("#" + w + d.id.A, t).offset().left ?
								(g = B("#" + w + d.id.A, t), a.target = g.length > 0 ? g.get(0) : a.target) : t && (t.removeClass(d.node.TMPTARGET_TREE),
									w && B("#" + w + d.id.A, t).removeClass(d.node.TMPTARGET_NODE + "_" + d.move.TYPE_PREV).removeClass(d.node
										.TMPTARGET_NODE + "_" + I.move.TYPE_NEXT).removeClass(d.node.TMPTARGET_NODE + "_" + I.move.TYPE_INNER));
							w = t = null;
							J = !1;
							h = f;
							g = i.getSettings();
							for (var z in g)
								if (g[z].treeId && g[z].edit.enable && g[z].treeId != f.treeId && (a.target.id == g[z].treeId || B(a.target)
										.parents("#" + g[z].treeId).length > 0)) J = !0, h = g[z];
							z = G.scrollTop();
							j = G.scrollLeft();
							p = h.treeObj.offset();
							b = h.treeObj.get(0).scrollHeight;
							g = h.treeObj.get(0).scrollWidth;
							c = a.clientY + z - p.top;
							var E = h.treeObj.height() + p.top - a.clientY - z,
								r = a.clientX + j - p.left,
								s = h.treeObj.width() + p.left - a.clientX - j,
								p = c < f.edit.drag.borderMax && c > f.edit.drag.borderMin,
								o = E < f.edit.drag.borderMax &&
								E > f.edit.drag.borderMin,
								F = r < f.edit.drag.borderMax && r > f.edit.drag.borderMin,
								v = s < f.edit.drag.borderMax && s > f.edit.drag.borderMin,
								E = c > f.edit.drag.borderMin && E > f.edit.drag.borderMin && r > f.edit.drag.borderMin && s > f.edit.drag.borderMin,
								r = p && h.treeObj.scrollTop() <= 0,
								s = o && h.treeObj.scrollTop() + h.treeObj.height() + 10 >= b,
								M = F && h.treeObj.scrollLeft() <= 0,
								P = v && h.treeObj.scrollLeft() + h.treeObj.width() + 10 >= g;
							if (a.target && k.isChildOrSelf(a.target, h.treeId)) {
								for (var D = a.target; D && D.tagName && !k.eqs(D.tagName, "li") && D.id !=
									h.treeId;) D = D.parentNode;
								var R = !0;
								for (b = 0, c = n.length; b < c; b++)
									if (g = n[b], D.id === g.tId) {
										R = !1;
										break
									} else if (q(g, f).find("#" + D.id).length > 0) {
									R = !1;
									break
								}
								if (R && a.target && k.isChildOrSelf(a.target, D.id + d.id.A)) t = B(D), w = D.id
							}
							g = n[0];
							if (E && k.isChildOrSelf(a.target, h.treeId)) {
								if (!t && (a.target.id == h.treeId || r || s || M || P) && (J || !J && g.parentTId)) t = h.treeObj;
								p ? h.treeObj.scrollTop(h.treeObj.scrollTop() - 10) : o && h.treeObj.scrollTop(h.treeObj.scrollTop() + 10);
								F ? h.treeObj.scrollLeft(h.treeObj.scrollLeft() - 10) : v && h.treeObj.scrollLeft(h.treeObj.scrollLeft() +
									10);
								t && t != h.treeObj && t.offset().left < h.treeObj.offset().left && h.treeObj.scrollLeft(h.treeObj.scrollLeft() +
									t.offset().left - h.treeObj.offset().left)
							}
							C.css({
								top: a.clientY + z + 3 + "px",
								left: a.clientX + j + 3 + "px"
							});
							b = j = 0;
							if (t && t.attr("id") != h.treeId) {
								var A = w == null ? null : i.getNodeCache(h, w),
									p = (a.ctrlKey || a.metaKey) && f.edit.drag.isMove && f.edit.drag.isCopy || !f.edit.drag.isMove && f.edit.drag
									.isCopy;
								c = !!(H && w === H.tId);
								F = !!(Q && w === Q.tId);
								o = g.parentTId && g.parentTId == w;
								g = (p || !F) && k.apply(h.edit.drag.prev, [h.treeId, n, A],
									!!h.edit.drag.prev);
								c = (p || !c) && k.apply(h.edit.drag.next, [h.treeId, n, A], !!h.edit.drag.next);
								p = (p || !o) && !(h.data.keep.leaf && !i.nodeIsParent(f, A)) && k.apply(h.edit.drag.inner, [h.treeId, n, A],
									!!h.edit.drag.inner);
								o = function() {
									t = null;
									w = "";
									x = d.move.TYPE_INNER;
									u.css({
										display: "none"
									});
									if (window.zTreeMoveTimer) clearTimeout(window.zTreeMoveTimer), window.zTreeMoveTargetNodeTId = null
								};
								if (!g && !c && !p) o();
								else if (F = B("#" + w + d.id.A, t), v = A.isLastNode ? null : B("#" + A.getNextNode().tId + d.id.A, t.next()),
									E = F.offset().top, r =
									F.offset().left, s = g ? p ? 0.25 : c ? 0.5 : 1 : -1, M = c ? p ? 0.75 : g ? 0.5 : 0 : -1, z = (a.clientY +
										z - E) / F.height(), (s == 1 || z <= s && z >= -0.2) && g ? (j = 1 - u.width(), b = E - u.height() / 2, x =
										d.move.TYPE_PREV) : (M == 0 || z >= M && z <= 1.2) && c ? (j = 1 - u.width(), b = v == null || i.nodeIsParent(
										f, A) && A.open ? E + F.height() - u.height() / 2 : v.offset().top - u.height() / 2, x = d.move.TYPE_NEXT) :
									p ? (j = 5 - u.width(), b = E, x = d.move.TYPE_INNER) : o(), t) {
									u.css({
										display: "block",
										top: b + "px",
										left: r + j + "px"
									});
									F.addClass(d.node.TMPTARGET_NODE + "_" + x);
									if (S != w || T != x) K = (new Date).getTime();
									if (A && i.nodeIsParent(f,
											A) && x == d.move.TYPE_INNER && (z = !0, window.zTreeMoveTimer && window.zTreeMoveTargetNodeTId !== A.tId ?
											(clearTimeout(window.zTreeMoveTimer), window.zTreeMoveTargetNodeTId = null) : window.zTreeMoveTimer &&
											window.zTreeMoveTargetNodeTId === A.tId && (z = !1), z)) window.zTreeMoveTimer = setTimeout(function() {
										x == d.move.TYPE_INNER && A && i.nodeIsParent(f, A) && !A.open && (new Date).getTime() - K > h.edit.drag
											.autoOpenTime && k.apply(h.callback.beforeDragOpen, [h.treeId, A], !0) && (e.switchNode(h, A), h.edit.drag
												.autoExpandTrigger && h.treeObj.trigger(d.event.EXPAND,
													[h.treeId, A]))
									}, h.edit.drag.autoOpenTime + 50), window.zTreeMoveTargetNodeTId = A.tId
								}
							} else if (x = d.move.TYPE_INNER, t && k.apply(h.edit.drag.inner, [h.treeId, n, null], !!h.edit.drag.inner) ?
								t.addClass(d.node.TMPTARGET_TREE) : t = null, u.css({
									display: "none"
								}), window.zTreeMoveTimer) clearTimeout(window.zTreeMoveTimer), window.zTreeMoveTargetNodeTId = null;
							S = w;
							T = x;
							f.treeObj.trigger(d.event.DRAGMOVE, [a, f.treeId, n])
						}
						return !1
					}

					function l(a) {
						if (window.zTreeMoveTimer) clearTimeout(window.zTreeMoveTimer), window.zTreeMoveTargetNodeTId =
							null;
						T = S = null;
						G.unbind("mousemove", c);
						G.unbind("mouseup", l);
						G.unbind("selectstart", g);
						L.css("cursor", "");
						t && (t.removeClass(d.node.TMPTARGET_TREE), w && B("#" + w + d.id.A, t).removeClass(d.node.TMPTARGET_NODE +
							"_" + d.move.TYPE_PREV).removeClass(d.node.TMPTARGET_NODE + "_" + I.move.TYPE_NEXT).removeClass(d.node.TMPTARGET_NODE +
							"_" + I.move.TYPE_INNER));
						k.showIfameMask(f, !1);
						y.showHoverDom = !0;
						if (m.dragFlag != 0) {
							m.dragFlag = 0;
							var b, j, o;
							for (b = 0, j = n.length; b < j; b++) o = n[b], i.nodeIsParent(f, o) && m.dragNodeShowBefore[o.tId] &&
								!o.open && (e.expandCollapseNode(f, o, !o.open), delete m.dragNodeShowBefore[o.tId]);
							C && C.remove();
							u && u.remove();
							var r = (a.ctrlKey || a.metaKey) && f.edit.drag.isMove && f.edit.drag.isCopy || !f.edit.drag.isMove && f.edit
								.drag.isCopy;
							!r && t && w && n[0].parentTId && w == n[0].parentTId && x == d.move.TYPE_INNER && (t = null);
							if (t) {
								var p = w == null ? null : i.getNodeCache(h, w);
								if (k.apply(f.callback.beforeDrop, [h.treeId, n, p, x, r], !0) == !1) e.selectNodes(v, n);
								else {
									var s = r ? k.clone(n) : n;
									b = function() {
										if (J) {
											if (!r)
												for (var b = 0, c = n.length; b < c; b++) e.removeNode(f,
													n[b]);
											x == d.move.TYPE_INNER ? e.addNodes(h, p, -1, s) : e.addNodes(h, p.getParentNode(), x == d.move.TYPE_PREV ?
												p.getIndex() : p.getIndex() + 1, s)
										} else if (r && x == d.move.TYPE_INNER) e.addNodes(h, p, -1, s);
										else if (r) e.addNodes(h, p.getParentNode(), x == d.move.TYPE_PREV ? p.getIndex() : p.getIndex() + 1, s);
										else if (x != d.move.TYPE_NEXT)
											for (b = 0, c = s.length; b < c; b++) e.moveNode(h, p, s[b], x, !1);
										else
											for (b = -1, c = s.length - 1; b < c; c--) e.moveNode(h, p, s[c], x, !1);
										e.selectNodes(h, s);
										b = q(s[0], f).get(0);
										e.scrollIntoView(f, b);
										f.treeObj.trigger(d.event.DROP,
											[a, h.treeId, s, p, x, r])
									};
									x == d.move.TYPE_INNER && k.canAsync(h, p) ? e.asyncNode(h, p, !1, b) : b()
								}
							} else e.selectNodes(v, n), f.treeObj.trigger(d.event.DROP, [a, f.treeId, n, null, null, null])
						}
					}

					function g() {
						return !1
					}
					var o, j, f = i.getSetting(a.data.treeId),
						m = i.getRoot(f),
						y = i.getRoots();
					if (a.button == 2 || !f.edit.enable || !f.edit.drag.isCopy && !f.edit.drag.isMove) return !0;
					var r = a.target,
						s = i.getRoot(f).curSelectedList,
						n = [];
					if (i.isSelectedNode(f, b))
						for (o = 0, j = s.length; o < j; o++) {
							if (s[o].editNameFlag && k.eqs(r.tagName, "input") && r.getAttribute("treeNode" +
									d.id.INPUT) !== null) return !0;
							n.push(s[o]);
							if (n[0].parentTId !== s[o].parentTId) {
								n = [b];
								break
							}
						} else n = [b];
					e.editNodeBlur = !0;
					e.cancelCurEditNode(f);
					var G = B(f.treeObj.get(0).ownerDocument),
						L = B(f.treeObj.get(0).ownerDocument.body),
						C, u, t, J = !1,
						h = f,
						v = f,
						H, Q, S = null,
						T = null,
						w = null,
						x = d.move.TYPE_INNER,
						N = a.clientX,
						O = a.clientY,
						K = (new Date).getTime();
					k.uCanDo(f) && G.bind("mousemove", c);
					G.bind("mouseup", l);
					G.bind("selectstart", g);
					return !0
				}
			};
		B.extend(!0, B.fn.zTree.consts, I);
		B.extend(!0, B.fn.zTree._z, {
			tools: {
				getAbs: function(a) {
					a =
						a.getBoundingClientRect();
					return [a.left + (document.body.scrollLeft + document.documentElement.scrollLeft), a.top + (document.body.scrollTop +
						document.documentElement.scrollTop)]
				},
				inputFocus: function(a) {
					a.get(0) && (a.focus(), k.setCursorPosition(a.get(0), a.val().length))
				},
				inputSelect: function(a) {
					a.get(0) && (a.focus(), a.select())
				},
				setCursorPosition: function(a, b) {
					if (a.setSelectionRange) a.focus(), a.setSelectionRange(b, b);
					else if (a.createTextRange) {
						var c = a.createTextRange();
						c.collapse(!0);
						c.moveEnd("character",
							b);
						c.moveStart("character", b);
						c.select()
					}
				},
				showIfameMask: function(a, b) {
					for (var c = i.getRoot(a); c.dragMaskList.length > 0;) c.dragMaskList[0].remove(), c.dragMaskList.shift();
					if (b)
						for (var d = q("iframe", a), g = 0, e = d.length; g < e; g++) {
							var j = d.get(g),
								f = k.getAbs(j),
								j = q("<div id='zTreeMask_" + g + "' class='zTreeMask' style='top:" + f[1] + "px; left:" + f[0] +
									"px; width:" + j.offsetWidth + "px; height:" + j.offsetHeight + "px;'></div>", a);
							j.appendTo(q("body", a));
							c.dragMaskList.push(j)
						}
				}
			},
			view: {
				addEditBtn: function(a, b) {
					if (!(b.editNameFlag ||
							q(b, d.id.EDIT, a).length > 0) && k.apply(a.edit.showRenameBtn, [a.treeId, b], a.edit.showRenameBtn)) {
						var c = q(b, d.id.A, a),
							l = "<span class='" + d.className.BUTTON + " edit' id='" + b.tId + d.id.EDIT + "' title='" + k.apply(a.edit
								.renameTitle, [a.treeId, b], a.edit.renameTitle) + "' treeNode" + d.id.EDIT +
							" style='display:none;'></span>";
						c.append(l);
						q(b, d.id.EDIT, a).bind("click", function() {
							if (!k.uCanDo(a) || k.apply(a.callback.beforeEditName, [a.treeId, b], !0) == !1) return !1;
							e.editNode(a, b);
							return !1
						}).show()
					}
				},
				addRemoveBtn: function(a,
					b) {
					if (!(b.editNameFlag || q(b, d.id.REMOVE, a).length > 0) && k.apply(a.edit.showRemoveBtn, [a.treeId, b], a.edit
							.showRemoveBtn)) {
						var c = q(b, d.id.A, a),
							l = "<span class='" + d.className.BUTTON + " remove' id='" + b.tId + d.id.REMOVE + "' title='" + k.apply(a
								.edit.removeTitle, [a.treeId, b], a.edit.removeTitle) + "' treeNode" + d.id.REMOVE +
							" style='display:none;'></span>";
						c.append(l);
						q(b, d.id.REMOVE, a).bind("click", function() {
							if (!k.uCanDo(a) || k.apply(a.callback.beforeRemove, [a.treeId, b], !0) == !1) return !1;
							e.removeNode(a, b);
							a.treeObj.trigger(d.event.REMOVE,
								[a.treeId, b]);
							return !1
						}).bind("mousedown", function() {
							return !0
						}).show()
					}
				},
				addHoverDom: function(a, b) {
					if (i.getRoots().showHoverDom) b.isHover = !0, a.edit.enable && (e.addEditBtn(a, b), e.addRemoveBtn(a, b)),
						k.apply(a.view.addHoverDom, [a.treeId, b])
				},
				cancelCurEditNode: function(a, b, c) {
					var l = i.getRoot(a),
						g = l.curEditNode;
					if (g) {
						var o = l.curEditInput,
							b = b ? b : c ? i.nodeName(a, g) : o.val();
						if (k.apply(a.callback.beforeRename, [a.treeId, g, b, c], !0) === !1) return !1;
						i.nodeName(a, g, b);
						q(g, d.id.A, a).removeClass(d.node.CURSELECTED_EDIT);
						o.unbind();
						e.setNodeName(a, g);
						g.editNameFlag = !1;
						l.curEditNode = null;
						l.curEditInput = null;
						e.selectNode(a, g, !1);
						a.treeObj.trigger(d.event.RENAME, [a.treeId, g, c])
					}
					return l.noSelection = !0
				},
				editNode: function(a, b) {
					var c = i.getRoot(a);
					e.editNodeBlur = !1;
					if (i.isSelectedNode(a, b) && c.curEditNode == b && b.editNameFlag) setTimeout(function() {
						k.inputFocus(c.curEditInput)
					}, 0);
					else {
						b.editNameFlag = !0;
						e.removeTreeDom(a, b);
						e.cancelCurEditNode(a);
						e.selectNode(a, b, !1);
						q(b, d.id.SPAN, a).html("<input type=text class='rename' id='" +
							b.tId + d.id.INPUT + "' treeNode" + d.id.INPUT + " >");
						var l = q(b, d.id.INPUT, a);
						l.attr("value", i.nodeName(a, b));
						a.edit.editNameSelectAll ? k.inputSelect(l) : k.inputFocus(l);
						l.bind("blur", function() {
							e.editNodeBlur || e.cancelCurEditNode(a)
						}).bind("keydown", function(b) {
							b.keyCode == "13" ? (e.editNodeBlur = !0, e.cancelCurEditNode(a)) : b.keyCode == "27" && e.cancelCurEditNode(
								a, null, !0)
						}).bind("click", function() {
							return !1
						}).bind("dblclick", function() {
							return !1
						});
						q(b, d.id.A, a).addClass(d.node.CURSELECTED_EDIT);
						c.curEditInput = l;
						c.noSelection = !1;
						c.curEditNode = b
					}
				},
				moveNode: function(a, b, c, l, g, k) {
					var j = i.getRoot(a);
					if (b != c && (!a.data.keep.leaf || !b || i.nodeIsParent(a, b) || l != d.move.TYPE_INNER)) {
						var f = c.parentTId ? c.getParentNode() : j,
							m = b === null || b == j;
						m && b === null && (b = j);
						if (m) l = d.move.TYPE_INNER;
						j = b.parentTId ? b.getParentNode() : j;
						if (l != d.move.TYPE_PREV && l != d.move.TYPE_NEXT) l = d.move.TYPE_INNER;
						if (l == d.move.TYPE_INNER)
							if (m) c.parentTId = null;
							else {
								if (!i.nodeIsParent(a, b)) i.nodeIsParent(a, b, !0), b.open = !!b.open, e.setNodeLineIcos(a, b);
								c.parentTId =
									b.tId
							} var y;
						m ? y = m = a.treeObj : (!k && l == d.move.TYPE_INNER ? e.expandCollapseNode(a, b, !0, !1) : k || e.expandCollapseNode(
							a, b.getParentNode(), !0, !1), m = q(b, a), y = q(b, d.id.UL, a), m.get(0) && !y.get(0) && (y = [], e.makeUlHtml(
							a, b, y, ""), m.append(y.join(""))), y = q(b, d.id.UL, a));
						var r = q(c, a);
						r.get(0) ? m.get(0) || r.remove() : r = e.appendNodes(a, c.level, [c], null, -1, !1, !0).join("");
						y.get(0) && l == d.move.TYPE_INNER ? y.append(r) : m.get(0) && l == d.move.TYPE_PREV ? m.before(r) : m.get(
							0) && l == d.move.TYPE_NEXT && m.after(r);
						var s;
						y = -1;
						var r = 0,
							n = null,
							m = null,
							B = c.level,
							v = i.nodeChildren(a, f),
							C = i.nodeChildren(a, j),
							u = i.nodeChildren(a, b);
						if (c.isFirstNode) {
							if (y = 0, v.length > 1) n = v[1], n.isFirstNode = !0
						} else if (c.isLastNode) y = v.length - 1, n = v[y - 1], n.isLastNode = !0;
						else
							for (j = 0, s = v.length; j < s; j++)
								if (v[j].tId == c.tId) {
									y = j;
									break
								} y >= 0 && v.splice(y, 1);
						if (l != d.move.TYPE_INNER)
							for (j = 0, s = C.length; j < s; j++) C[j].tId == b.tId && (r = j);
						if (l == d.move.TYPE_INNER) {
							u || (u = i.nodeChildren(a, b, []));
							if (u.length > 0) m = u[u.length - 1], m.isLastNode = !1;
							u.splice(u.length, 0, c);
							c.isLastNode = !0;
							c.isFirstNode =
								u.length == 1
						} else b.isFirstNode && l == d.move.TYPE_PREV ? (C.splice(r, 0, c), m = b, m.isFirstNode = !1, c.parentTId =
							b.parentTId, c.isFirstNode = !0, c.isLastNode = !1) : b.isLastNode && l == d.move.TYPE_NEXT ? (C.splice(r +
							1, 0, c), m = b, m.isLastNode = !1, c.parentTId = b.parentTId, c.isFirstNode = !1, c.isLastNode = !0) : (
							l == d.move.TYPE_PREV ? C.splice(r, 0, c) : C.splice(r + 1, 0, c), c.parentTId = b.parentTId, c.isFirstNode = !
							1, c.isLastNode = !1);
						i.fixPIdKeyValue(a, c);
						i.setSonNodeLevel(a, c.getParentNode(), c);
						e.setNodeLineIcos(a, c);
						e.repairNodeLevelClass(a,
							c, B);
						!a.data.keep.parent && v.length < 1 ? (i.nodeIsParent(a, f, !1), f.open = !1, b = q(f, d.id.UL, a), l = q(f,
							d.id.SWITCH, a), j = q(f, d.id.ICON, a), e.replaceSwitchClass(f, l, d.folder.DOCU), e.replaceIcoClass(f,
							j, d.folder.DOCU), b.css("display", "none")) : n && e.setNodeLineIcos(a, n);
						m && e.setNodeLineIcos(a, m);
						a.check && a.check.enable && e.repairChkClass && (e.repairChkClass(a, f), e.repairParentChkClassWithSelf(a,
							f), f != c.parent && e.repairParentChkClassWithSelf(a, c));
						k || e.expandCollapseParentNode(a, c.getParentNode(), !0, g)
					}
				},
				removeEditBtn: function(a,
					b) {
					q(b, d.id.EDIT, a).unbind().remove()
				},
				removeRemoveBtn: function(a, b) {
					q(b, d.id.REMOVE, a).unbind().remove()
				},
				removeTreeDom: function(a, b) {
					b.isHover = !1;
					e.removeEditBtn(a, b);
					e.removeRemoveBtn(a, b);
					k.apply(a.view.removeHoverDom, [a.treeId, b])
				},
				repairNodeLevelClass: function(a, b, c) {
					if (c !== b.level) {
						var e = q(b, a),
							g = q(b, d.id.A, a),
							a = q(b, d.id.UL, a),
							c = d.className.LEVEL + c,
							b = d.className.LEVEL + b.level;
						e.removeClass(c);
						e.addClass(b);
						g.removeClass(c);
						g.addClass(b);
						a.removeClass(c);
						a.addClass(b)
					}
				},
				selectNodes: function(a,
					b) {
					for (var c = 0, d = b.length; c < d; c++) e.selectNode(a, b[c], c > 0)
				}
			},
			event: {},
			data: {
				setSonNodeLevel: function(a, b, c) {
					if (c) {
						var d = i.nodeChildren(a, c);
						c.level = b ? b.level + 1 : 0;
						if (d)
							for (var b = 0, g = d.length; b < g; b++) d[b] && i.setSonNodeLevel(a, c, d[b])
					}
				}
			}
		});
		var H = B.fn.zTree,
			k = H._z.tools,
			d = H.consts,
			e = H._z.view,
			i = H._z.data,
			q = k.$;
		i.exSetting({
			edit: {
				enable: !1,
				editNameSelectAll: !1,
				showRemoveBtn: !0,
				showRenameBtn: !0,
				removeTitle: "remove",
				renameTitle: "rename",
				drag: {
					autoExpandTrigger: !1,
					isCopy: !0,
					isMove: !0,
					prev: !0,
					next: !0,
					inner: !0,
					minMoveSize: 5,
					borderMax: 10,
					borderMin: -5,
					maxShowNodeNum: 5,
					autoOpenTime: 500
				}
			},
			view: {
				addHoverDom: null,
				removeHoverDom: null
			},
			callback: {
				beforeDrag: null,
				beforeDragOpen: null,
				beforeDrop: null,
				beforeEditName: null,
				beforeRename: null,
				onDrag: null,
				onDragMove: null,
				onDrop: null,
				onRename: null
			}
		});
		i.addInitBind(function(a) {
			var b = a.treeObj,
				c = d.event;
			b.bind(c.RENAME, function(b, c, d, e) {
				k.apply(a.callback.onRename, [b, c, d, e])
			});
			b.bind(c.DRAG, function(b, c, d, e) {
				k.apply(a.callback.onDrag, [c, d, e])
			});
			b.bind(c.DRAGMOVE, function(b,
				c, d, e) {
				k.apply(a.callback.onDragMove, [c, d, e])
			});
			b.bind(c.DROP, function(b, c, d, e, f, i, q) {
				k.apply(a.callback.onDrop, [c, d, e, f, i, q])
			})
		});
		i.addInitUnBind(function(a) {
			var a = a.treeObj,
				b = d.event;
			a.unbind(b.RENAME);
			a.unbind(b.DRAG);
			a.unbind(b.DRAGMOVE);
			a.unbind(b.DROP)
		});
		i.addInitCache(function() {});
		i.addInitNode(function(a, b, c) {
			if (c) c.isHover = !1, c.editNameFlag = !1
		});
		i.addInitProxy(function(a) {
			var b = a.target,
				c = i.getSetting(a.data.treeId),
				e = a.relatedTarget,
				g = "",
				o = null,
				j = "",
				f = null,
				m = null;
			if (k.eqs(a.type, "mouseover")) {
				if (m =
					k.getMDom(c, b, [{
						tagName: "a",
						attrName: "treeNode" + d.id.A
					}])) g = k.getNodeMainDom(m).id, j = "hoverOverNode"
			} else if (k.eqs(a.type, "mouseout")) m = k.getMDom(c, e, [{
				tagName: "a",
				attrName: "treeNode" + d.id.A
			}]), m || (g = "remove", j = "hoverOutNode");
			else if (k.eqs(a.type, "mousedown") && (m = k.getMDom(c, b, [{
					tagName: "a",
					attrName: "treeNode" + d.id.A
				}]))) g = k.getNodeMainDom(m).id, j = "mousedownNode";
			if (g.length > 0) switch (o = i.getNodeCache(c, g), j) {
				case "mousedownNode":
					f = v.onMousedownNode;
					break;
				case "hoverOverNode":
					f = v.onHoverOverNode;
					break;
				case "hoverOutNode":
					f = v.onHoverOutNode
			}
			return {
				stop: !1,
				node: o,
				nodeEventType: j,
				nodeEventCallback: f,
				treeEventType: "",
				treeEventCallback: null
			}
		});
		i.addInitRoot(function(a) {
			var a = i.getRoot(a),
				b = i.getRoots();
			a.curEditNode = null;
			a.curEditInput = null;
			a.curHoverNode = null;
			a.dragFlag = 0;
			a.dragNodeShowBefore = [];
			a.dragMaskList = [];
			b.showHoverDom = !0
		});
		i.addZTreeTools(function(a, b) {
			b.cancelEditName = function(a) {
				i.getRoot(this.setting).curEditNode && e.cancelCurEditNode(this.setting, a ? a : null, !0)
			};
			b.copyNode = function(b,
				l, g, o) {
				if (!l) return null;
				var j = i.nodeIsParent(a, b);
				if (b && !j && this.setting.data.keep.leaf && g === d.move.TYPE_INNER) return null;
				var f = this,
					m = k.clone(l);
				if (!b) b = null, g = d.move.TYPE_INNER;
				g == d.move.TYPE_INNER ? (l = function() {
					e.addNodes(f.setting, b, -1, [m], o)
				}, k.canAsync(this.setting, b) ? e.asyncNode(this.setting, b, o, l) : l()) : (e.addNodes(this.setting, b.parentNode,
					-1, [m], o), e.moveNode(this.setting, b, m, g, !1, o));
				return m
			};
			b.editName = function(a) {
				a && a.tId && a === i.getNodeCache(this.setting, a.tId) && (a.parentTId && e.expandCollapseParentNode(this.setting,
					a.getParentNode(), !0), e.editNode(this.setting, a))
			};
			b.moveNode = function(b, l, g, o) {
				function j() {
					e.moveNode(m.setting, b, l, g, !1, o)
				}
				if (!l) return l;
				var f = i.nodeIsParent(a, b);
				if (b && !f && this.setting.data.keep.leaf && g === d.move.TYPE_INNER) return null;
				else if (b && (l.parentTId == b.tId && g == d.move.TYPE_INNER || q(l, this.setting).find("#" + b.tId).length >
						0)) return null;
				else b || (b = null);
				var m = this;
				k.canAsync(this.setting, b) && g === d.move.TYPE_INNER ? e.asyncNode(this.setting, b, o, j) : j();
				return l
			};
			b.setEditable = function(a) {
				this.setting.edit.enable =
					a;
				return this.refresh()
			}
		});
		var N = e.cancelPreSelectedNode;
		e.cancelPreSelectedNode = function(a, b) {
			for (var c = i.getRoot(a).curSelectedList, d = 0, g = c.length; d < g; d++)
				if (!b || b === c[d])
					if (e.removeTreeDom(a, c[d]), b) break;
			N && N.apply(e, arguments)
		};
		var O = e.createNodes;
		e.createNodes = function(a, b, c, d, g) {
			O && O.apply(e, arguments);
			c && e.repairParentChkClassWithSelf && e.repairParentChkClassWithSelf(a, d)
		};
		var V = e.makeNodeUrl;
		e.makeNodeUrl = function(a, b) {
			return a.edit.enable ? null : V.apply(e, arguments)
		};
		var K = e.removeNode;
		e.removeNode =
			function(a, b) {
				var c = i.getRoot(a);
				if (c.curEditNode === b) c.curEditNode = null;
				K && K.apply(e, arguments)
			};
		var P = e.selectNode;
		e.selectNode = function(a, b, c) {
			var d = i.getRoot(a);
			if (i.isSelectedNode(a, b) && d.curEditNode == b && b.editNameFlag) return !1;
			P && P.apply(e, arguments);
			e.addHoverDom(a, b);
			return !0
		};
		var U = k.uCanDo;
		k.uCanDo = function(a, b) {
			var c = i.getRoot(a);
			if (b && (k.eqs(b.type, "mouseover") || k.eqs(b.type, "mouseout") || k.eqs(b.type, "mousedown") || k.eqs(b.type,
					"mouseup"))) return !0;
			if (c.curEditNode) e.editNodeBlur = !1, c.curEditInput.focus();
			return !c.curEditNode && (U ? U.apply(e, arguments) : !0)
		}
	})(jQuery);
	/*
	 * JQuery zTree exHideNodes v3.5.37
	 * http://treejs.cn/
	 *
	 * Copyright (c) 2010 Hunter.z
	 *
	 * Licensed same as jquery - MIT License
	 * http://www.opensource.org/licenses/mit-license.php
	 *
	 * email: hunter.z@263.net
	 * Date: 2018-08-21
	 */
	(function(j) {
		j.extend(!0, j.fn.zTree._z, {
			view: {
				clearOldFirstNode: function(c, a) {
					for (var b = a.getNextNode(); b;) {
						if (b.isFirstNode) {
							b.isFirstNode = !1;
							e.setNodeLineIcos(c, b);
							break
						}
						if (b.isLastNode) break;
						b = b.getNextNode()
					}
				},
				clearOldLastNode: function(c, a, b) {
					for (a = a.getPreNode(); a;) {
						if (a.isLastNode) {
							a.isLastNode = !1;
							b && e.setNodeLineIcos(c, a);
							break
						}
						if (a.isFirstNode) break;
						a = a.getPreNode()
					}
				},
				makeDOMNodeMainBefore: function(c, a, b) {
					a = d.isHidden(a, b);
					c.push("<li ", a ? "style='display:none;' " : "", "id='", b.tId, "' class='",
						l.className.LEVEL, b.level, "' tabindex='0' hidefocus='true' treenode>")
				},
				showNode: function(c, a) {
					d.isHidden(c, a, !1);
					d.initShowForExCheck(c, a);
					k(a, c).show()
				},
				showNodes: function(c, a, b) {
					if (a && a.length != 0) {
						var f = {},
							g, i;
						for (g = 0, i = a.length; g < i; g++) {
							var h = a[g];
							if (!f[h.parentTId]) {
								var u = h.getParentNode();
								f[h.parentTId] = u === null ? d.getRoot(c) : h.getParentNode()
							}
							e.showNode(c, h, b)
						}
						for (var j in f) a = d.nodeChildren(c, f[j]), e.setFirstNodeForShow(c, a), e.setLastNodeForShow(c, a)
					}
				},
				hideNode: function(c, a) {
					d.isHidden(c, a,
						!0);
					a.isFirstNode = !1;
					a.isLastNode = !1;
					d.initHideForExCheck(c, a);
					e.cancelPreSelectedNode(c, a);
					k(a, c).hide()
				},
				hideNodes: function(c, a, b) {
					if (a && a.length != 0) {
						var f = {},
							g, i;
						for (g = 0, i = a.length; g < i; g++) {
							var h = a[g];
							if ((h.isFirstNode || h.isLastNode) && !f[h.parentTId]) {
								var j = h.getParentNode();
								f[h.parentTId] = j === null ? d.getRoot(c) : h.getParentNode()
							}
							e.hideNode(c, h, b)
						}

						for (var k in f) a = d.nodeChildren(c, f[k]), e.setFirstNodeForHide(c, a), e.setLastNodeForHide(c, a)
					}
				},
				setFirstNode: function(c, a) {
					var b = d.nodeChildren(c, a),
						f =
						d.isHidden(c, b[0], !1);
					b.length > 0 && !f ? b[0].isFirstNode = !0 : b.length > 0 && e.setFirstNodeForHide(c, b)
				},
				setLastNode: function(c, a) {
					var b = d.nodeChildren(c, a),
						f = d.isHidden(c, b[0]);
					b.length > 0 && !f ? b[b.length - 1].isLastNode = !0 : b.length > 0 && e.setLastNodeForHide(c, b)
				},
				setFirstNodeForHide: function(c, a) {
					var b, f, g;
					for (f = 0, g = a.length; f < g; f++) {
						b = a[f];
						if (b.isFirstNode) break;
						if (!d.isHidden(c, b) && !b.isFirstNode) {
							b.isFirstNode = !0;
							e.setNodeLineIcos(c, b);
							break
						} else b = null
					}
					return b
				},
				setFirstNodeForShow: function(c, a) {
					var b, f,
						g, i, h;
					for (f = 0, g = a.length; f < g; f++) {
						b = a[f];
						var j = d.isHidden(c, b);
						if (!i && !j && b.isFirstNode) {
							i = b;
							break
						} else if (!i && !j && !b.isFirstNode) b.isFirstNode = !0, i = b, e.setNodeLineIcos(c, b);
						else if (i && b.isFirstNode) {
							b.isFirstNode = !1;
							h = b;
							e.setNodeLineIcos(c, b);
							break
						}
					}
					return {
						"new": i,
						old: h
					}
				},
				setLastNodeForHide: function(c, a) {
					var b, f;
					for (f = a.length - 1; f >= 0; f--) {
						b = a[f];
						if (b.isLastNode) break;
						if (!d.isHidden(c, b) && !b.isLastNode) {
							b.isLastNode = !0;
							e.setNodeLineIcos(c, b);
							break
						} else b = null
					}
					return b
				},
				setLastNodeForShow: function(c,
					a) {
					var b, f, g, i;
					for (f = a.length - 1; f >= 0; f--) {
						b = a[f];
						var h = d.isHidden(c, b);
						if (!g && !h && b.isLastNode) {
							g = b;
							break
						} else if (!g && !h && !b.isLastNode) b.isLastNode = !0, g = b, e.setNodeLineIcos(c, b);
						else if (g && b.isLastNode) {
							b.isLastNode = !1;
							i = b;
							e.setNodeLineIcos(c, b);
							break
						}
					}
					return {
						"new": g,
						old: i
					}
				}
			},
			data: {
				initHideForExCheck: function(c, a) {
					if (d.isHidden(c, a) && c.check && c.check.enable) {
						if (typeof a._nocheck == "undefined") a._nocheck = !!a.nocheck, a.nocheck = !0;
						a.check_Child_State = -1;
						e.repairParentChkClassWithSelf && e.repairParentChkClassWithSelf(c,
							a)
					}
				},
				initShowForExCheck: function(c, a) {
					if (!d.isHidden(c, a) && c.check && c.check.enable) {
						if (typeof a._nocheck != "undefined") a.nocheck = a._nocheck, delete a._nocheck;
						if (e.setChkClass) {
							var b = k(a, l.id.CHECK, c);
							e.setChkClass(c, b, a)
						}
						e.repairParentChkClassWithSelf && e.repairParentChkClassWithSelf(c, a)
					}
				}
			}
		});
		var j = j.fn.zTree,
			m = j._z.tools,
			l = j.consts,
			e = j._z.view,
			d = j._z.data,
			k = m.$;
		d.isHidden = function(c, a, b) {
			if (!a) return !1;
			c = c.data.key.isHidden;
			typeof b !== "undefined" && (typeof b === "string" && (b = m.eqs(checked, "true")), a[c] = !!b);
			return a[c]
		};
		d.exSetting({
			data: {
				key: {
					isHidden: "isHidden"
				}
			}
		});
		d.addInitNode(function(c, a, b) {
			a = d.isHidden(c, b);
			d.isHidden(c, b, a);
			d.initHideForExCheck(c, b)
		});
		d.addBeforeA(function() {});
		d.addZTreeTools(function(c, a) {
			a.showNodes = function(a, b) {
				e.showNodes(c, a, b)
			};
			a.showNode = function(a, b) {
				a && e.showNodes(c, [a], b)
			};
			a.hideNodes = function(a, b) {
				e.hideNodes(c, a, b)
			};
			a.hideNode = function(a, b) {
				a && e.hideNodes(c, [a], b)
			};
			var b = a.checkNode;
			if (b) a.checkNode = function(f, e, i, h) {
				(!f || !d.isHidden(c, f)) && b.apply(a, arguments)
			}
		});
		var n = d.initNode;
		d.initNode = function(c, a, b, f, g, i, h) {
			var j = (f ? f : d.getRoot(c))[c.data.key.children];
			d.tmpHideFirstNode = e.setFirstNodeForHide(c, j);
			d.tmpHideLastNode = e.setLastNodeForHide(c, j);
			h && (e.setNodeLineIcos(c, d.tmpHideFirstNode), e.setNodeLineIcos(c, d.tmpHideLastNode));
			g = d.tmpHideFirstNode === b;
			i = d.tmpHideLastNode === b;
			n && n.apply(d, arguments);
			h && i && e.clearOldLastNode(c, b, h)
		};
		var o = d.makeChkFlag;
		if (o) d.makeChkFlag = function(c, a) {
			(!a || !d.isHidden(c, a)) && o.apply(d, arguments)
		};
		var p = d.getTreeCheckedNodes;
		if (p) d.getTreeCheckedNodes = function(c, a, b, f) {
			if (a && a.length > 0) {
				var e = a[0].getParentNode();
				if (e && d.isHidden(c, e)) return []
			}
			return p.apply(d, arguments)
		};
		var q = d.getTreeChangeCheckedNodes;
		if (q) d.getTreeChangeCheckedNodes = function(c, a, b) {
			if (a && a.length > 0) {
				var e = a[0].getParentNode();
				if (e && d.isHidden(c, e)) return []
			}
			return q.apply(d, arguments)
		};
		var r = e.expandCollapseSonNode;
		if (r) e.expandCollapseSonNode = function(c, a, b, f, g) {
			(!a || !d.isHidden(c, a)) && r.apply(e, arguments)
		};
		var s = e.setSonNodeCheckBox;
		if (s) e.setSonNodeCheckBox =
			function(c, a, b, f) {
				(!a || !d.isHidden(c, a)) && s.apply(e, arguments)
			};
		var t = e.repairParentChkClassWithSelf;
		if (t) e.repairParentChkClassWithSelf = function(c, a) {
			(!a || !d.isHidden(c, a)) && t.apply(e, arguments)
		}
	})(jQuery);




	TreeSelect.prototype.render = function(options) {
		var elem = options.elem,
			// 请求地址
			url = options.url,
			// 请求头
			headers = options.headers,
			// 请求方式
			type = options.type === undefined ? 'GET' : options.type,
			// 节点点击回调
			click = options.click,
			// 渲染成功后的回调函数
			success = options.success,
			// 占位符（提示信息）
			placeholder = options.placeholder === undefined ? '请选择' : options.placeholder,
			// 是否开启搜索
			search = options.search === undefined ? false : options.search,
			// 样式配置项
			style = options.style,
			// 唯一id
			tmp = new Date().getTime(),
			// 参考ztree setting
			data = options.data,
			DATA = {},
			selected = 'layui-form-selected',
			TREE_OBJ = undefined,
			TREE_INPUT_ID = 'treeSelect-input-' + tmp,
			TREE_INPUT_CLASS = 'layui-treeselect',
			TREE_SELECT_ID = 'layui-treeSelect-' + tmp,
			TREE_SELECT_CLASS = 'layui-treeSelect',
			TREE_SELECT_TITLE_ID = 'layui-select-title-' + tmp,
			TREE_SELECT_TITLE_CLASS = 'layui-select-title',
			TREE_SELECT_BODY_ID = 'layui-treeSelect-body-' + tmp,
			TREE_SELECT_BODY_CLASS = 'layui-treeSelect-body',
			TREE_SELECT_SEARCHED_CLASS = 'layui-treeSelect-search-ed';
			data = {data:data};

		var a = {
			init: function() {
				// todo
				$.ajax({
					url: url,
					type: type,
					headers: headers,
					dataType: 'json',
					success: function(d) {

						DATA = d.data;
						a.hideElem().input().toggleSelect().loadCss().preventEvent();
						$.fn.zTree.init($('#' + TREE_SELECT_BODY_ID), a.setting(data), DATA);
						TREE_OBJ = $.fn.zTree.getZTreeObj(TREE_SELECT_BODY_ID);
						if (search) {
							a.searchParam();
						}
						a.configStyle();
						if (success) {
							var obj = {
								treeId: TREE_SELECT_ID,
								data: DATA
							};
							success(obj);
						}
					}
				});
				return a;
			},
			// 检查input是否有默认值
			checkDefaultValue: function() {

			},
			setting: function(params) {
				var setting = {
					callback: {
						onClick: a.onClick,
						onExpand: a.onExpand,
						onCollapse: a.onCollapse,
						beforeExpand: a.ztreeCallBack.beforeExpand
					}
				};
				return $.extend(true, params,setting);
			},
			ztreeCallBack: {
				beforeExpand: function() {
					a.configStyle();
				},
			},
			onCollapse: function() {
				a.focusInput();
			},
			onExpand: function() {
				a.configStyle();
				a.focusInput();
			},
			focusInput: function() {
				$('#' + TREE_INPUT_ID).focus();
			},
			onClick: function(event, treeId, treeNode) {
				//todo
				var asName = data.data.key.name;
				var name = treeNode[asName],
					id = treeNode.id,
					$input = $('#' + TREE_SELECT_TITLE_ID + ' input');
				$input.val(name);
				$(elem).attr('value', id).val(id);
				$('#' + TREE_SELECT_ID).removeClass(selected);

				if (click) {
					var obj = {
						// data: DATA,
						current: treeNode,
						treeId: TREE_SELECT_ID
					};
					click(obj);
				}
				return a;
			},
			hideElem: function() {
				$(elem).hide();
				return a;
			},
			input: function() {
				var readonly = '';
				if (!search) {
					readonly = 'readonly';
				}
				//todo
				var selectHtml = '<div class="' + TREE_SELECT_CLASS + ' layui-unselect layui-form-select" id="' +
					TREE_SELECT_ID + '">' +
					'<div class="' + TREE_SELECT_TITLE_CLASS + '" id="' + TREE_SELECT_TITLE_ID + '">' +
					' <input type="text" lay-verify="selectOption"  id="' + TREE_INPUT_ID + '" placeholder="' + placeholder + '" value="" ' + readonly +
					' class="layui-input layui-unselect">' +
					'<i class="layui-edge"></i>' +
					'</div>' +
					'<div class="layui-anim layui-anim-upbit" style="">' +
					'<div class="' + TREE_SELECT_BODY_CLASS + ' ztree" id="' + TREE_SELECT_BODY_ID + '"></div>' +
					'</div>' +
					'</div>';
				$(elem).parent().append(selectHtml);
				return a;
			},
			/**
			 * 展开/折叠下拉框
			 */
			toggleSelect: function() {
				var item = '#' + TREE_SELECT_TITLE_ID;
				a.event('click', item, function(e) {
					var $select = $('#' + TREE_SELECT_ID);
					if ($select.hasClass(selected)) {
						$select.removeClass(selected);
						$('#' + TREE_INPUT_ID).blur();
					} else {
						// 隐藏其他picker
						$('.layui-form-select').removeClass(selected);
						// 显示当前picker
						$select.addClass(selected);
					}
					e.stopPropagation();
				});
				$(document).click(function() {
					var $select = $('#' + TREE_SELECT_ID);
					if ($select.hasClass(selected)) {
						$select.removeClass(selected);
						$('#' + TREE_INPUT_ID).blur();
					}
				});
				return a;
			},
			// 模糊查询
			searchParam: function() {
				if (!search) {
					return;
				}

				// var item = '#' + TREE_INPUT_ID;
				// a.fuzzySearch(item, null, true);
				var item = '#' + TREE_INPUT_ID;
				a.event('input propertychange', item, function (e) {
					var elem = e.target,
						t = $(elem).val();
					$('#' + TREE_SELECT_ID + ' li.' + TREE_SELECT_SEARCHED_CLASS).removeClass(TREE_SELECT_SEARCHED_CLASS);
					// todo
					var nodes = TREE_OBJ.getNodesByParamFuzzy(data.data.key.name, t, null);
					if (t !== '') {
						a.checkNodes(nodes);
						// 隐藏非结果项
						var lis = $('#' + TREE_SELECT_ID + ' li[treenode]');
						for (var i = 0; i < lis.length; i++) {
							var oLi = lis.eq(i);
							if (!oLi.hasClass(TREE_SELECT_SEARCHED_CLASS)){
								oLi.hide();
							} else {
								oLi.show();
							}
						}
						// 无结果提示

					} else {
						$('#' + TREE_SELECT_ID + ' li[treenode]').show();
					}
				});
			},
			fuzzySearch: function(searchField, isHighLight, isExpand) {
				var zTreeObj = TREE_OBJ; //get the ztree object by ztree id
				if (!zTreeObj) {
					alert("fail to get ztree object");
				}
				var nameKey = zTreeObj.setting.data.key.name; //get the key of the node name
				isHighLight = isHighLight === false ? false : true; //default true, only use false to disable highlight
				isExpand = isExpand ? true : false; // not to expand in default
				zTreeObj.setting.view.nameIsHTML = isHighLight; //allow use html in node name for highlight use

				var metaChar = '[\\[\\]\\\\\^\\$\\.\\|\\?\\*\\+\\(\\)]'; //js meta characters
				var rexMeta = new RegExp(metaChar, 'gi'); //regular expression to match meta characters

				// keywords filter function 
				function ztreeFilter(zTreeObj, _keywords, callBackFunc) {
					if (!_keywords) {
						_keywords = ''; //default blank for _keywords 
					}

					// function to find the matching node
					function filterFunc(node) {
						if (node && node.oldname && node.oldname.length > 0) {
							node[nameKey] = node.oldname; //recover oldname of the node if exist
						}

						zTreeObj.updateNode(node); //update node to for modifications take effect
						if (_keywords.length == 0) {
							//return true to show all nodes if the keyword is blank
							zTreeObj.showNode(node);
							zTreeObj.expandNode(node, isExpand);
							return true;
						}

						//transform node name and keywords to lowercase
						if (node[nameKey] && node[nameKey].toLowerCase().indexOf(_keywords.toLowerCase()) != -1) {
							zTreeObj.showNode(node); //show node with matching keywords
							return true; //return true and show this node
						}
						zTreeObj.hideNode(node); // hide node that not matched
						return false; //return false for node not matched
					}

					var nodesShow = zTreeObj.getNodesByFilter(filterFunc); //get all nodes that would be shown
					processShowNodes(nodesShow, _keywords); //nodes should be reprocessed to show correctly
				}

				/**
				 * reprocess of nodes before showing
				 */
				function processShowNodes(nodesShow, _keywords) {
					if (nodesShow && nodesShow.length > 0) {
						//process the ancient nodes if _keywords is not blank
						if (_keywords.length > 0) {
							$.each(nodesShow, function(n, obj) {
								var pathOfOne = obj.getPath(); //get all the ancient nodes including current node
								if (pathOfOne && pathOfOne.length > 0) {
									//i < pathOfOne.length-1 process every node in path except self
									for (var i = 0; i < pathOfOne.length - 1; i++) {
										zTreeObj.showNode(pathOfOne[i]); //show node 
										zTreeObj.expandNode(pathOfOne[i], true); //expand node
									}
								}
							});
						} else { //show all nodes when _keywords is blank and expand the root nodes
							var rootNodes = zTreeObj.getNodesByParam('level', '0'); //get all root nodes
							$.each(rootNodes, function(n, obj) {
								zTreeObj.expandNode(obj, true); //expand all root nodes
							});
						}
					}
				}

				//listen to change in input element
				$(searchField).bind('input propertychange', function() {
					var _keywords = $(this).val();
					searchNodeLazy(_keywords); //call lazy load
				});

				var timeoutId = null;
				// excute lazy load once after input change, the last pending task will be cancled  
				function searchNodeLazy(_keywords) {
					if (timeoutId) {
						//clear pending task
						clearTimeout(timeoutId);
					}
					timeoutId = setTimeout(function() {
						//todo
						ztreeFilter(zTreeObj, _keywords); //lazy load ztreeFilter function
						$(searchField).focus(); //focus input field again after filtering
					}, 500);
				}
			},
			checkNodes: function(nodes) {
				for (var i = 0; i < nodes.length; i++) {
					var o = nodes[i],
						pid = o.parentTId,
						tid = o.tId;
					if (pid !== null) {
						// 获取父节点
						$('#' + pid).addClass(TREE_SELECT_SEARCHED_CLASS);
						var pNode = TREE_OBJ.getNodesByParam("tId", pid, null);
						TREE_OBJ.expandNode(pNode[0], true, false, true);
					}
					$('#' + tid).addClass(TREE_SELECT_SEARCHED_CLASS);
				}
			},
			// 阻止Layui的一些默认事件
			preventEvent: function() {
				var item = '#' + TREE_SELECT_ID + ' .layui-anim';
				a.event('click', item, function(e) {
					e.stopPropagation();
				});
				return a;
			},
			loadCss: function() {
				var ztree =
					'.ztree *{padding:0;margin:0;font-size:12px;font-family:Verdana,Arial,Helvetica,AppleGothic,sans-serif}.ztree{margin:0;padding:5px;color:#333}.ztree li{padding:0;margin:0;list-style:none;line-height:14px;text-align:left;white-space:nowrap;outline:0}.ztree li ul{margin:0;padding:0 0 0 18px}.ztree li ul.line{background:url(./img/line_conn.gif) 0 0 repeat-y;}.ztree li a{padding:1px 3px 0 0;margin:0;cursor:pointer;height:17px;color:#333;background-color:transparent;text-decoration:none;vertical-align:top;display:inline-block}.ztree li a:hover{text-decoration:underline}.ztree li a.curSelectedNode{padding-top:0px;background-color:#FFE6B0;color:black;height:16px;border:1px #FFB951 solid;opacity:0.8;}.ztree li a.curSelectedNode_Edit{padding-top:0px;background-color:#FFE6B0;color:black;height:16px;border:1px #FFB951 solid;opacity:0.8;}.ztree li a.tmpTargetNode_inner{padding-top:0px;background-color:#316AC5;color:white;height:16px;border:1px #316AC5 solid;opacity:0.8;filter:alpha(opacity=80)}.ztree li a.tmpTargetNode_prev{}.ztree li a.tmpTargetNode_next{}.ztree li a input.rename{height:14px;width:80px;padding:0;margin:0;font-size:12px;border:1px #7EC4CC solid;*border:0px}.ztree li span{line-height:16px;margin-right:2px}.ztree li span.button{line-height:0;margin:0;width:16px;height:16px;display:inline-block;vertical-align:middle;border:0 none;cursor:pointer;outline:none;background-color:transparent;background-repeat:no-repeat;background-attachment:scroll;background-image:url("./img/zTreeStandard.png");*background-image:url("./img/zTreeStandard.gif")}.ztree li span.button.chk{width:13px;height:13px;margin:0 3px 0 0;cursor:auto}.ztree li span.button.chk.checkbox_false_full{background-position:0 0}.ztree li span.button.chk.checkbox_false_full_focus{background-position:0 -14px}.ztree li span.button.chk.checkbox_false_part{background-position:0 -28px}.ztree li span.button.chk.checkbox_false_part_focus{background-position:0 -42px}.ztree li span.button.chk.checkbox_false_disable{background-position:0 -56px}.ztree li span.button.chk.checkbox_true_full{background-position:-14px 0}.ztree li span.button.chk.checkbox_true_full_focus{background-position:-14px -14px}.ztree li span.button.chk.checkbox_true_part{background-position:-14px -28px}.ztree li span.button.chk.checkbox_true_part_focus{background-position:-14px -42px}.ztree li span.button.chk.checkbox_true_disable{background-position:-14px -56px}.ztree li span.button.chk.radio_false_full{background-position:-28px 0}.ztree li span.button.chk.radio_false_full_focus{background-position:-28px -14px}.ztree li span.button.chk.radio_false_part{background-position:-28px -28px}.ztree li span.button.chk.radio_false_part_focus{background-position:-28px -42px}.ztree li span.button.chk.radio_false_disable{background-position:-28px -56px}.ztree li span.button.chk.radio_true_full{background-position:-42px 0}.ztree li span.button.chk.radio_true_full_focus{background-position:-42px -14px}.ztree li span.button.chk.radio_true_part{background-position:-42px -28px}.ztree li span.button.chk.radio_true_part_focus{background-position:-42px -42px}.ztree li span.button.chk.radio_true_disable{background-position:-42px -56px}.ztree li span.button.switch{width:18px;height:18px}.ztree li span.button.root_open{background-position:-92px -54px}.ztree li span.button.root_close{background-position:-74px -54px}.ztree li span.button.roots_open{background-position:-92px 0}.ztree li span.button.roots_close{background-position:-74px 0}.ztree li span.button.center_open{background-position:-92px -18px}.ztree li span.button.center_close{background-position:-74px -18px}.ztree li span.button.bottom_open{background-position:-92px -36px}.ztree li span.button.bottom_close{background-position:-74px -36px}.ztree li span.button.noline_open{background-position:-92px -72px}.ztree li span.button.noline_close{background-position:-74px -72px}.ztree li span.button.root_docu{background:none;}.ztree li span.button.roots_docu{background-position:-56px 0}.ztree li span.button.center_docu{background-position:-56px -18px}.ztree li span.button.bottom_docu{background-position:-56px -36px}.ztree li span.button.noline_docu{background:none;}.ztree li span.button.ico_open{margin-right:2px;background-position:-110px -16px;vertical-align:top;*vertical-align:middle}.ztree li span.button.ico_close{margin-right:2px;background-position:-110px 0;vertical-align:top;*vertical-align:middle}.ztree li span.button.ico_docu{margin-right:2px;background-position:-110px -32px;vertical-align:top;*vertical-align:middle}.ztree li span.button.edit{margin-right:2px;background-position:-110px -48px;vertical-align:top;*vertical-align:middle}.ztree li span.button.remove{margin-right:2px;background-position:-110px -64px;vertical-align:top;*vertical-align:middle}.ztree li span.button.ico_loading{margin-right:2px;background:url(./img/loading.gif) no-repeat scroll 0 0 transparent;vertical-align:top;*vertical-align:middle}ul.tmpTargetzTree{background-color:#FFE6B0;opacity:0.8;filter:alpha(opacity=80)}span.tmpzTreeMove_arrow{width:16px;height:16px;display:inline-block;padding:0;margin:2px 0 0 1px;border:0 none;position:absolute;background-color:transparent;background-repeat:no-repeat;background-attachment:scroll;background-position:-110px -80px;background-image:url("./img/zTreeStandard.png");*background-image:url("./img/zTreeStandard.gif")}ul.ztree.zTreeDragUL{margin:0;padding:0;position:absolute;width:auto;height:auto;overflow:hidden;background-color:#cfcfcf;border:1px #00B83F dotted;opacity:0.8;filter:alpha(opacity=80)}.zTreeMask{z-index:10000;background-color:#cfcfcf;opacity:0.0;filter:alpha(opacity=0);position:absolute}',
					ztree_ex =
					'.layui-treeSelect .ztree li span.button{font-family:layui-icon!important;font-size:16px;font-style:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background:none;line-height:inherit;}.layui-treeSelect .ztree li span.button.ico_open{display:none;}.layui-treeSelect .ztree li span.button.ico_close{display:none;}.layui-treeSelect .ztree li span.button.ico_docu:before{content:"\\e621";}.layui-treeSelect .ztree li span.button.bottom_close:before,.layui-treeSelect .ztree li span.button.center_close:before,.layui-treeSelect .ztree li span.button.roots_close:before,.layui-treeSelect .ztree li span.button.root_close:before{content:"\\e623";}.layui-treeSelect .ztree li span.button.bottom_open:before,.layui-treeSelect .ztree li span.button.roots_open:before,.layui-treeSelect .ztree li span.button.center_open:before,.layui-treeSelect .ztree li span.button.root_open:before{content:"\\e625";}.layui-treeSelect .ztree li a:hover{text-decoration:none;}.layui-treeSelect .ztree *{font-size:14px;}.layui-treeSelect .ztree li{line-height:inherit;padding:2px 0;}.layui-treeSelect .ztree li span.button.switch{position:relative;top:-1px;}.layui-treeSelect .ztree li a,.ztree li span{line-height:18px;height:inherit;}.layui-treeSelect .ztree li a.curSelectedNode{color:#5FB878;background:none;border:none;height:inherit;padding-top:1px;}.layui-treeSelect .layui-anim::-webkit-scrollbar{width:6px;height:6px;background-color:#F5F5F5;}.layui-treeSelect .layui-anim::-webkit-scrollbar-track{box-shadow:inset 0 0 6px rgba(107,98,98,0.3);border-radius:10px;background-color:#F5F5F5;}.layui-treeSelect .layui-anim::-webkit-scrollbar-thumb{border-radius:10px;box-shadow:inset 0 0 6px rgba(107,98,98,0.3);background-color:#555;}.layui-treeSelect.layui-form-select .layui-anim{display:none;position:absolute;left:0;top:42px;padding:5px 0;z-index:9999;min-width:100%;border:1px solid #d2d2d2;max-height:300px;overflow-y:auto;background-color:#fff;border-radius:2px;box-shadow:0 2px 4px rgba(0,0,0,.12);box-sizing:border-box;}.layui-treeSelect.layui-form-selected .layui-anim{display:block;}.layui-treeSelect .ztree li ul.line{background:none;position:relative;}.layui-treeSelect .ztree li ul.line:before{content:"";height:100%;border-left:1px dotted #ece;position:absolute;left:8px;}.layui-treeSelect .ztree li .center_docu:before,.ztree li .bottom_docu::before{content:"";height:100%;border-left:1px dotted #ece;position:absolute;left:8px;}.layui-treeSelect .ztree li .center_docu::after,.ztree li .bottom_docu::after{content:"";position:absolute;left:8px;top:8px;width:8px;border-top:1px dotted #ece;}.layui-treeSelect .ztree li span.button.ico_open{display:inline-block;position:relative;top:1px;}.layui-treeSelect .ztree li span.button.ico_close{display:inline-block;position:relative;top:1px;}.layui-treeSelect .ztree li span.button.ico_open:before{content:"\\e643";}.layui-treeSelect .ztree li span.button.ico_close:before{content:"\\e63f";}';
				$head = $('head'),
					ztreeStyle = $head.find('style[ztree]');

				if (ztreeStyle.length === 0) {
					$head.append($('<style ztree>').append(ztree).append(ztree_ex))
				}
				return a;
			},
			configStyle: function() {
				if (style == undefined || style.line == undefined || !style.line.enable) {
					$('#' + TREE_SELECT_ID).find('li .center_docu,li .bottom_docu').hide();
					// .layui-treeSelect .ztree li .center_docu:before, .ztree li .bottom_docu::before
				}

				if (style == undefined || style.folder == undefined || !style.folder.enable) {
					$('#' + TREE_SELECT_ID).find('li span.button.ico_open').hide();
					$('#' + TREE_SELECT_ID).find('li span.button.ico_close').hide();
				}
			},
			event: function(evt, el, fn) {
				$('body').on(evt, el, fn);
			}
		};
		a.init();
		return new TreeSelect();
	};

	/**
	 * 重新加载trerSelect
	 * @param filter
	 */
	TreeSelect.prototype.refresh = function(filter) {
		var treeObj = obj.treeObj(filter);
		treeObj.reAsyncChildNodes(null, "refresh");
	};

	/**
	 * 选中节点，因为tree是异步加载，所以必须在success回调中调用checkNode函数，否则无法获取生成的DOM元素
	 * @param filter lay-filter属性
	 * @param id 选中的id
	 */
	TreeSelect.prototype.checkNode = function(filter, id) {
		var o = obj.filter(filter),
			treeInput = o.find('.layui-select-title input'),
			treeObj = obj.treeObj(filter),
			data = treeObj.setting.data,
			node = treeObj.getNodeByParam(data.simpleData.idKey, id, null),
			name = node[data.key.name];
		treeInput.val(name);
		o.find('a[treenode_a]').removeClass('curSelectedNode');
		obj.get(filter).val(id).attr('value', id);
		treeObj.selectNode(node);
	};

	/**
	 * 撤销选中的节点
	 * @param filter lay-filter属性
	 * @param fn 回调函数
	 */
	TreeSelect.prototype.revokeNode = function(filter, fn) {
		var o = obj.filter(filter);
		o.find('a[treenode_a]').removeClass('curSelectedNode');
		o.find('.layui-select-title input.layui-input').val('');
		obj.get(filter).attr('value', '').val('');
		obj.treeObj(filter).expandAll(false);
		if (fn) {
			fn({
				treeId: o.attr('id')
			});
		}
	}

	/**
	 * 销毁组件
	 */
	TreeSelect.prototype.destroy = function(filter) {
		var o = obj.filter(filter);
		o.remove();
		obj.get(filter).show();
	}

	/**
	 * 获取zTree对象，可调用所有zTree函数
	 * @param filter
	 */
	TreeSelect.prototype.zTree = function(filter) {
		return obj.treeObj(filter);
	};
	/**
	 * 获取input的id
	 */
	TreeSelect.prototype.getInputId = function () {
		return TreeSelect.prototype.render.TREE_INPUT_ID;
	};
	var obj = {
		get: function(filter) {
			if (!filter) {
				layui.hint().error('filter 不能为空');
			}
			return $('*[lay-filter=' + filter + ']');
		},
		filter: function(filter) {
			var tf = obj.get(filter),
				o = tf.next();
			return o;
		},
		treeObj: function(filter) {
			var o = obj.filter(filter),
				treeId = o.find('.layui-treeSelect-body').attr('id'),
				tree = $.fn.zTree.getZTreeObj(treeId);
			return tree;
		}
	};

	//输出接口
	var mod = new TreeSelect();
	exports(_MOD, mod);
});
